반응형

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 문법 사용):

  1. list의 요소 갯수가 1개면, 가장 흔한 문자가 단독으로 1개 존재한다는 뜻이므로 그냥 그 문자를 바로 출력하면 된다.
  2. list의 요소 갯수가 2개면, 가장 흔하게 나타난 2개 문자의 실제 갯수를 따져봐야 한다.
    • (첫번째 문자의 갯수 > 두번째 문자의 갯수) 이면 그 문자를 출력한다
    • (첫번째 문자의 갯수 = 두번째 문자의 갯수) 이면 "?"를 출력한다.
    • (첫번째 문자의 갯수 < 두번째 문자의 갯수) 인 경우는 most_common()의 리턴값에서 애초에 있을 수 없다.
반응형

+ Recent posts