Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔백준/파이썬〕1157번 단어 공부 본문
반응형
출처
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력하라. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력하라.
예제
# 입력
Mississipi
zZa
z
baaa
# 출력
?
Z
Z
A
풀이 - (1)
# 입력 받은 문자열을 모두 대문자화 + 리스트화
string = list(input().upper())
# 문자와 등장 횟수를 key-value 쌍으로 저장할 딕셔너리 생성
di = dict()
for i in string :
di[i] = di.get(i, 0) + 1
# value-key 쌍으로 바꾸어 저장할 리스트 생성
count = list()
for key, value in di.items() :
new_tuple = (value, key)
count.append(new_tuple)
# 리스트를 내림차순으로 정렬
count = sorted(count, reverse=True)
# 가장 많이 등장한 문자가 여러 개이면 물음표 출력, 하나라면 해당 문자 출력
if len(count) == 1 :
print(count[0][1])
elif count[0][0] == count[1][0] :
print('?')
else :
print(count[0][1])
- 딕셔너리와 리스트의 기본 기능만 이용한 풀이 방법
- 빈 딕셔너리를 생성하여 리스트 내의 문자 등장 횟수(=value)를 get() 으로 구하여 저장한다
- 가장 등장 횟수(=value)가 많은 순서대로 정렬해야 하기 때문에 key-value 쌍을 뒤집어 새로운 리스트를 만든다
- 리스트의 첫 번째와 두 번째 요소의 횟수가 같으면 물음표를 출력하고 아니면 문자를 출력
풀이 - (2)
# import collections 해서 collections.Counter() 처럼 써도 됨
from collections import Counter
# 입력 받은 문자열을 모두 대문자화 + 리스트화
string = list(input().upper())
# 리스트를 딕셔너리화(문자-문자개수 튜플)
c = Counter(string)
# 가장 많이 등장한 문자 리스트(2개 이상이면 물음표 출력)
c_max = list()
for letter, count in c.items() :
if count == max(c.values()) :
c_max.append(letter)
if len(c_max) > 1 :
print('?')
else :
print(c_max[0])
- collections 모듈의 Counter 클래스를 이용하는 방법이다
- Counter()는 주어진 리스트를 카운터 딕셔너리로 바꾸어 반환해준다
- 딕셔너리.items(), 딕셔너리.values() 는 각각 (key-value) 쌍들의 리스트와 value 들의 리스트를 반환한다
이전에 작성한 글 참고
- 딕셔너리의 값(=문자 등장 횟수) 중 최대값을 가지는 키(=문자)를 출력한다
- 이때 c_max 의 요소가 2개 이상이면 물음표를 출력한다
노트
- collections 모듈에 Counter() 이외에도 유용한 모듈이 많으니 따로 공부해두자
반응형
'PROGRAMMING::LANGUAGE > Python' 카테고리의 다른 글
〔백준/파이썬〕13305번 주유소 (0) | 2022.06.29 |
---|---|
〔백준/파이썬〕1931번 회의실 배정 (0) | 2022.06.26 |
〔백준/파이썬〕2675번 문자열 반복 (0) | 2022.06.24 |
〔백준/파이썬〕10809번 알파벳 찾기 (0) | 2022.06.24 |
〔모두를 위한 파이썬〕튜플, 가장 빈도가 높은 단어 찾기 (0) | 2022.06.24 |
Comments