새소식

알고리즘/기타

[백준 1157] 단어 공부 (파이썬 풀이)

  • -

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

Mississipi
?
zZa
Z
z
Z
baaa
A
word = input().upper() # 입력값을 다 대문자로 바꿈 dict = {} # 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 # 최빈값이 2개 이상이면 ? 출력 if n>1: print('?') else: print(ans)

1. 먼저 upper 함수를 사용하여 모든 문자를 대문자로 바꾼다.

string.upper() : 대문자로 변환

string.lower() : 소문자로 변환

 

2. 딕셔너리로 각 문자의 사용 횟수를 저장했다. key에는 알파벳이, value에는 사용 횟수를 저장한다.

 

3. most_cnt 변수에 value값인 사용 횟수의 최댓값, 즉 최빈값이 사용된 횟수를 저장한다.

 

4. for문을 돌며 n 변수에 최빈값의 개수를, ans 변수에 최빈값을 저장한다.

 

5. 만약에 n이 1 초과면, 즉 최빈값이 2개 이상이면 ?를 출력하고 아니면 ans에 저장된 최빈값을 출력한다.

 

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.