루나의 TIL 기술 블로그

백준 1157 단어공부

|

백준 1157번 단어공부 문제

사고 과정

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

word = input().upper()
#입력받은 단어를 대문자로 word 변수에 저장한다.
unique_word = list(set(word))
print(unique_word) #zZa 의 경우 : ['Z', 'A']
#입력받은 단어에 사용된 알파벳을 중복되지 않은 리스트로 저장한다. set()의 사용
cnt_list = []
for i in unique_word:
    #unique_word의 각 알파벳들을 iterate하면서 
    cnt = word.count(i)
    #word변수에 들어있는 해당 알파벳의 갯수를 cnt변수에 저장한다
    cnt_list.append(cnt)
    #cnt의 값을 cnt_list 배열에 집어넣는다
print(cnt_list) #[2,1]

if cnt_list.count(max(cnt_list)) > 1:
    #cnt_list의 최대 인수의 갯수가 1개를 넘으면
    print('?')
    #물음표를 출력한다
else:
    print(unique_word[(cnt_list.index(max(cnt_list)))].upper())
    #아니라면 최대 인수의 위치를 cnt_list에서 찾아서 
    #풀어서 설명하자면
print(max(cnt_list)) # 사용된 알파벳의 갯수 중 가장 큰 수 : 2
print(cnt_list.index(2)) # cnt_list에서 2의 값의 위치 : 0
print(unique_word[0]) #unique_word리스트에서 0번째 값 : Z

3일 후에 다시 보니까 마지막 부분이 좀 헷갈렸는데
unique_word와 cnt_list값이 순서대로 1:1로 대응되기 떄문에 쓸 수 있는 방법인 것 같다.

숏코딩

from statistics import*
try:t=mode(input().upper()) #t에 최빈값(mode)을 저장한다
except:t='?' #안 되면 ? 출력
print(t)

수학통계함수 statistics(설명)[https://python.flowdas.com/library/statistics.html]와 오류예외처리구문(설명)[https://wikidocs.net/30]을 이용한 간결한 코드이다!

주요 포인트 및 생각해볼 점

다른 조원의 블로그롤 보고 생각이 나서 algorithm을 푼 3일 뒤에 다시 살펴봤는데 마지막 줄을 읽을 수 없어서 당황스러웠다.
algorithm을 풀 때 특히 다른 곳에서 가져온 것이라면 한 줄 한 줄 다 이해하고 주석을 달아놓는 것이 좋을 것 같다.