이번 주말은 여태까지 틀린 문제들을 모아놓고 모두 해결해보기로 했다.
그중에서 이 문제는 딕셔너리를 활용한 문제이다.
본인이 딕셔너리가 약하다고 판단되기에 블로그에 내 풀이와 다른 사람의 풀이, 그리고 문제를 풀 때 자주 활용되는 딕셔너리의 성질과 활용에 대해 알아보고자 이 문제를 블로그에 글을 쓰게 되었다.
https://www.acmicpc.net/problem/1157
1. 내 풀이
a = input()
word=a.lower()
dict1 = {}
list1 = []
for i in word:
if i not in list1:
list1.append(i)
dict1[i] = 1
else:
dict1[i] += 1
sorted_dict = sorted(dict1.items(), key= lambda item:item[1], reverse=True)
if len(list1) >1 :
if sorted_dict[0][1] == sorted_dict[1][1]:
print('?')
else:
print(sorted_dict[0][0].upper())
else:
print(sorted_dict[0][0].upper())
깔끔하게 딕셔너리 하나로만 문제를 해결하고 싶었는데 그냥 단어에 포함되는 알파벳을 저장시킨 리스트를 하나 더 만들어서 해결했다. 깔끔하게 문제를 해결했다기보다는 내가 딕셔너리 활용이 약하기 때문에 문제를 좀 더 돌아서 해결한 느낌이라 다른 사람이 어떻게 문제를 해결했는지 궁금했다.
[Python] Dictionary - Key / Value로 내림차순/오름차순 하기
key를 기준으로는 sorted()를 사용하면 오름차순으로 정렬할 수 있다. argument를 1개 받으며, dict.items()를 넣어주면 오름차순으로 정렬된다. tuple로 이루어진 list를 반환한다.key만 출력하는 경우에는 s
velog.io
아울러 딕셔너리 key와 value sort할 때 참고하기 너무 좋은 블로그 글을 첨부한다!
2. 다른 사람 풀이(딕셔너리 이용 x)
words = input().upper()
unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거
cnt_list = []
for x in unique_words :
cnt = words.count(x)
cnt_list.append(cnt) # count 숫자를 리스트에 append
if cnt_list.count(max(cnt_list)) > 1 : # count 숫자 최대값이 중복되면
print('?')
else :
max_index = cnt_list.index(max(cnt_list)) # count 숫자 최대값 인덱스(위치)
print(unique_words[max_index])
백준 1157번 [파이썬 알고리즘] 단어 공부
[Python] 백준 알고리즘 온라인 저지 1157번 : 단어 공부 Python3 코드 words = input().upper() unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거 cnt_list = [] for x in unique_words : cnt = words.count(x) cnt_l
ooyoung.tistory.com
구글링 해보니까 딕셔너리를 이용하기 보다 대부분 리스트를 통해 count 함수와 index 함수로 문제를 해결하였다.
'자료구조,알고리즘(Python) > 백준' 카테고리의 다른 글
9461:파도반 함수(DP) (0) | 2024.12.01 |
---|---|
백준 200문제 돌파! (0) | 2024.11.28 |
1032:명령 프롬프트 (4) | 2024.10.23 |
1547 : 공[Python] (4) | 2024.10.13 |
11582 : 치킨 TOP N (Python) (0) | 2024.09.10 |