[백준] 1157번 : 단어 공부 (python)
문제 링크
https://www.acmicpc.net/problem/1157
내가 푼 코드
from collections import Counter
word = input()
word_u = word.upper()
count = Counter(word_u).most_common()
if len(count) == 1:
print(count[0][0])
elif count[0][1] == count[1][1]:
print("?")
else:
print(count[0][0])
1) collections 모듈의 Counter 함수를 import 해준다.
2) word를 입력받고, word_u에 upper() 함수를 통해 word를 다 대문자로 바꿔서 넣어준다.
=> 대소문자를 구분하지 않고, 출력은 대문자로 하기 때문에 이렇게 바꿔주었다.
3) Counter(word_u).most_common(n)을 사용하면 word_u의 요소를 세어서 리스트에 담긴 튜플 형태로 최빈값 n개를 반환해줍니다. 그래서 count를 출력해주면 아래와 같이 나오고 type은 list라는 것을 알 수 있습니다.
4) count[0][0]은 가장 많은 알파벳의 값에 해당됩니다. (count[0][1]은 가장 많은 알파벳의 갯수)
5) 만약 가장 많은 알파벳이 두개 이상이라면 ? 를 출력해줘야 하니까 count[0][1] == count[1][1]이면 ? 를 출력해줍니다.
하지만 문제가 있습니다. 이 두가지만 실행한다면 aa나 bbbb 처럼 한 알파벳으로 이루어진 단어는 count[1][1]이 없어서 오류가 나게 됩니다.그렇기 때문에
6) if count의 길이가 1이면 count[0][0]으로 알파벳을 출력해줍니다.
과정
처음에 어떻게 풀어야할지 감이 안 와서 counter. 함수에 대한 구글링,,^^을 통해 힌트를 얻었기 때문에 저 혼자 힘으로 푼 것이 아니다... 그리고 한 알파벳으로 이루어진 단어도 생각해줘야하는 것을 잊고 "왜 안 돼!!!!!!!!!!!!!!" 라고 생각했다.
그리고 count 함수를 잘 모르다보니 함수처리 해준 것들의 type을 알아보며 풀었다...
다른 분들은 어떻게 풀었을까..?
남이 푼 코드
word = input().upper()
dict = {}
for i in word:
if i not in dict:
dict[i] = 1
else:
dict[i] += 1
most_cnt = max(dict.values())
n = 0
ans = 0
for key, value in dict.items():
if value == most_cnt:
n += 1
ans = key
if n>1:
print('?')
else:
print(ans)
이 분은 dictionary에다가 [알파벳 : 사용횟수] 형태로 다 입력을 해주셨다.
그리고 최빈값의 사용횟수를 max(dict.values())를 통해 알아주고 key랑 value를 다 for문을 돌려서 찾아주셨다.
난 아는 것도 없으면서 너무 얌생이 방법을 찾아서 사용한 거 같다. 다음에 이런 방법으로 또 풀어봐야지.