백준 1157 단어공부
13 Jun 2021 | 기초 내용 추가하기 백준 TIL사고 과정
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
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을 풀 때 특히 다른 곳에서 가져온 것이라면 한 줄 한 줄 다 이해하고 주석을 달아놓는 것이 좋을 것 같다.