
언젠가 이 문제를 보고 풀 엄두가 나지 않아서 북마크로 추가만 했었는데, 오늘 다시보니까 풀 수 있었다.
약간 까다로운 문제인데 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))])