언젠가 이 문제를 보고 풀 엄두가 나지 않아서 북마크로 추가만 했었는데, 오늘 다시보니까 풀 수 있었다.
약간 까다로운 문제인데 count
, index
함수를 사용하면 금방 풀 수 있었다.
먼저 for
문을 풀어서 작성하고 이후에 list_comprehension
으로 코드를 단축시켰다.
이해하기 쉽도록 예제 입력에 나와있는 Mississipi
를 기준으로 알아보자.
- 입력을 대문자 or 소문자로 통일 시킨다. (
set
으로 변환하기 위함.)- 입력을
set
으로 형 변환을 시켜 중복을 제거한다.set
형으로for
문을 돌려i
값이 몇 번 쓰였는지 확인하고 빈 리스트에 append시킨다.count_list = [1, 4, 1, 4]
가 나오게 되는데 이는compress_s = ['S', 'P', 'I', 'M']
가 몇 번 사용됐는지count
한 값이다.- 조건문을 통해 만약,
[1, 4, 1, 4]
의count(max_index)
즉, max값이 2개 이상(가장 많이 사용된 알파벳의 갯수가 동일하다는 의미다)이면?
를 출력하고- 그렇지 않으면,
count_list.index(max(count_list))
즉,count_list
중count
가 가장 많이 선언된index
의 위치를 반환하고 그 값을count_list[]
에 넣어주면 어떤 값이 가장 많이 쓰였는지 알 수 있다.
이때,compress_s
는list
로 변경해야index
를 대입 할 수 있다.- 6번의 과정을 하나씩 살펴보기 전에 먼저,
set
은 순서가 정해져있지 않기때문에 결과값의 순서가 바뀔 수도 있다.print(count_list.index(max(count_list)))
= 1이고, 이는compress_s[1]
과 같다.compress_s = ['A', 'B']
따라서,compress_s[1] = B
이다.
조금 복잡하지만 구현 과정을 천천히 손으로 써내려가면 금방 이해 할 수 있다.
s = input().upper()
compress_s = list(set(s))
count_list = [s.count(i) for i in compress_s]
if count_list.count(max(count_list)) > 1:
print('?')
else:
print(compress_s[count_list.index(max(count_list))])