http://acmicpc.net/problem/1157
{코드}
words = input().upper()
word_list = list(set(words))
word_count = [words.count(c) for c in word_list]
if(word_count.count(max(word_count)) > 1):
print('?')
else:
print(word_list[(word_count.index(max(word_count)))])
{설명}
이 문제를 푸는 하나의 방법은 각 문자 별로(대소문자 구분 없이) 개수를 저장해서 만약 최댓값이 2개 이상이라면?를 출력하고 아니라면 최댓값을 가진 문자를 출력하면 됩니다.
이를 위해 집합과 count함수를 사용합니다.
-
먼저 문자열을 입력받고 대문자로 바꿔줍니다.(upper함수)
-
그리고 문자열을 집합으로 만들 것(중복 없애기)을 리스트로 만들어줍니다. - word_list
-
위의 리스트를 통해 각 문자의 갯수를 저장합니다. - word_count (word_count와 word_list는 같은 인덱스를 가진다고 봅니다)
-
그러면 문자의 갯수의 최댓값이 1개보다 많으면?를 출력합니다
-
아니라면 최댓값의 word_count에서의 인덱스를 가져와 그 인덱스에 해당하는 word_list의 값을 출력합니다.
{코드}
from collections import Counter
word = input().upper()
word_count = Counter(input())
if list(word_count.values()).count(max(word_count.values())) > 1:
print('?')
else:
for k, v in word_count.items():
if v == max(word_count.values()):
print(k)
break
{설명}
파이썬의 기본 모듈 중 collections에는 Counter라는 클래스가 있는데 이는 말 그대로 인자로 받은 이터러블(iterable)에서 각 인덱스 별로 개수를 딕셔너리 형태로 반환합니다.
이때 키는 인덱스-즉, 이 경우에는 각 알파벳들이 되고, 값은 갯수가 됩니다.
-
먼저 문자열을 받고 대문자로 바꿔줍니다. (upper함수)
-
그리고 위의 문자열을 Counter로 만들어줍니다. - word_count
-
그리고 word_count의 최댓값이 1개 초과인지 확인합니다. - list(word_count.values())는 위의 word_list와 같습니다.
-
word_count.values()를 쓰는 이유는 딕셔너리에서 키를 제외한 값만 받아야 하기 때문입니다.
-
-
만약 최댓값의 갯수가 1보다 많으면 ?를 출력하고 아니면 최댓값에 해당하는 키값을 출력합니다.
-
items함수는 키와 값을 이터러블 형태로 만든다.
-
즉, 최댓값과 같은 값을 가진 키가 답이다.
-
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 2908번-파이썬/Python] 상수 (0) | 2020.10.13 |
---|---|
[백준 1152번-파이썬/Python] 단어의 개수 (0) | 2020.10.13 |
[백준 2675번-파이썬/Python] 문자열 반복 (0) | 2020.10.13 |
[백준 10809번-파이썬/Python] 알파벳 찾기 (0) | 2020.10.13 |
[백준 11720번-파이썬/Python] 숫자의 합 (0) | 2020.10.13 |