[백준 / 1157] 단어 공부


날짜: 2021년 6월 17일
소요 시간: 37분 21초
카테고리: 수학문제
태그: bronze.1, 1157, 파이썬

백준 1157 - 단어 공부

입출력 예시

예제 입력예제 출력
Mississipi?
zZaZ
zZ
baaaA

내가 적은 코드

word = input().upper()
arr = list(set(word))
answer = []
for i in arr:
    answer.append(word.count(i))
if answer.count(max(answer)) >= 2:
    print("?")
else:
    print(arr[(answer.index(max(answer)))])

풀이 과정

word에 문자열을 저장한 뒤 upper()함수로 모두 대문자로 바꾸어 주고, arr에 문자열에서 중복을 제외한 원소들을 저장한다.
그리고 arr의 원소를 차례대로 word 문자열의 원소들의 개수를 count()함수로 카운팅해서 answer리스트에 저장한다.

만약 answer의 리스트에서 최댓값의 갯수가 2개 이상일 때 (=가장 많이 사용 된 알파벳이 여러개일 때) ?를 출력한다.

answer의 최댓값 (=가장 많이 사용된 알파벳의 갯수)의 인덱스를 arr에서 인덱싱해서 (=가장 많이 사용된 알파벳) 출력한다.

베스트 코드

s,a=input().lower(),[]
for i in range(97,123):
 a.append(s.count(chr(i)))
print('?'if a.count(max(a))>1 else chr(a.index(max(a))+97).upper())

반성

  • 문자열과 리스트의 개념을 확실히 알고 있어서 인덱싱에 대한 이해도가 높아야 풀 수 있는 문제였다. 조금 삐걱거리긴 했어도 베스트 코드와 비슷한 로직으로 문제를 풀었단 점에 뿌듯했다.




© 2021. by hminkim