반응형
https://www.acmicpc.net/problem/1157
입력받은 단어 중 가장 갯수가 많은 알파벳이 무엇인지 출력하는 프로그램을 구현해야 한다(여러 개인 경우 "?"를 출력해야 한다).
문자열의 count() 함수 같은 것을 써서 복잡하게 풀 수도 있겠지만, collections 모듈의 Counter를 풀면 쉽게 풀 수 있겠다 생각이 들었다.
그리고 파이썬 3.10 버전부터 도입된, 아직 다소 생소한 match 문법도 써보기로 했다.
덕분에 아래와 같은 간단한 코드로 해결할 수 있었다.
정답 코드
from collections import Counter
word = input().upper()
c = Counter(word)
most_common_2 = c.most_common(2)
match len(most_common_2):
case 1:
print(most_common_2[0][0])
case 2:
print(most_common_2[0][0] if most_common_2[0][1] > most_common_2[1][1] else "?")
Counter 객체의 most_common(2) 호출은 가장 흔하게 나타난 문자 2개와 그 갯수를 tuple의 list 형태로 리턴한다.
list 요소의 갯수에 따라 분기를 다르게 탄다(여기서 match 문법 사용):
- list의 요소 갯수가 1개면, 가장 흔한 문자가 단독으로 1개 존재한다는 뜻이므로 그냥 그 문자를 바로 출력하면 된다.
- list의 요소 갯수가 2개면, 가장 흔하게 나타난 2개 문자의 실제 갯수를 따져봐야 한다.
- (첫번째 문자의 갯수 > 두번째 문자의 갯수) 이면 그 문자를 출력한다
- (첫번째 문자의 갯수 = 두번째 문자의 갯수) 이면 "?"를 출력한다.
- (첫번째 문자의 갯수 < 두번째 문자의 갯수) 인 경우는 most_common()의 리턴값에서 애초에 있을 수 없다.
반응형
'baekjoon' 카테고리의 다른 글
[BOJ] 2563번: 색종이 / Python - sum으로 2차원 list를 1차원 list로 변환 (0) | 2024.12.31 |
---|---|
[BOJ] 2444번: 별 찍기 - 7 / Python - f-string의 가운데 정렬 사용 (1) | 2024.12.24 |
[BOJ] 25083번: 새싹 / Python - multiline string, raw string 사용 (0) | 2024.12.23 |
[BOJ] 5622번: 다이얼 / Python (0) | 2024.12.21 |
[BOJ] 11720번: 숫자의 합 / Python - Generator Expression 사용 필기 (0) | 2024.12.21 |