문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램 작성하기. (대소문자 구분 X)
입력
알파벳 대소문자 단어. (단어 길이 < 1,000,000)
출력
가장 많이 사용된 알파벳을 대문자로 출력. 가장 많이 사용된 알파벳이 여러개라면 ?를 출력
예제 입력 1
Mississipi
예제 출력 1
?
예제 입력 2
zZa
예제 출력 2
Z
예제 입력 3
z
예제 출력 3
Z
예제 입력 4
baaa
예제 출력 4
A
풀이
구현 문제들 중에서 정답률이 50% 이하인 문제들을 골라서 풀어보려고 했는데 참교육 당해버렸다. 굉장히 복잡하게 끙끙거리고 있었는데 결국 찾아보니 set을 써서 풀 수있었다.
# Mississipi
words = input().upper() # MISSISSIPI
unique_words = list(set(words)) # ['I', 'S', 'P', 'M']
cnt_list = []
for x in unique_words:
cnt = words.count(x)
cnt_list.append(cnt)
if cnt_list.count(max(cnt_list)) > 1:
print("?")
else:
max_index = cnt_list.index(max(cnt_list))
print(unique_words[max_index])
# Mississipi
words = input().upper() # MISSISSIPI
unique_words = list(set(words)) # ['I', 'S', 'P', 'M']
먼저 입력받은 문자열이 대소문자를 구분하지 않고, 출력은 대문자로 한다고 했기 때문에 문자열에 upper()를 써줘서 모두 대문자로 바꾸어준다.
그리고 나서 집합 자료형인 set을 이용하여 unique_words라는 이름의 리스트로 만들어준다.
cnt_list = []
for x in unique_words:
cnt = words.count(x)
cnt_list.append(cnt)
# unique_words -> ['S', 'P', 'M', 'I']
# cnt_list -> [4, 1, 1, 4]
cnt_list라는 이름의 빈 리스트를 만들어주고, unique_words에 있는 값들을 하나씩 가져와서 처음에 입력받은 words배열에 x가 몇개 있는지 count를 이용해 세서 cnt 변수안에 넣어준다. 그러고 나서 cnt를 cnt_list에 추가해주는 작업을 모두 해주면 된다.
# unique_words -> ['S', 'P', 'M', 'I']
# cnt_list -> [4, 1, 1, 4]
if cnt_list.count(max(cnt_list)) > 1:
print("?")
else:
max_index = cnt_list.index(max(cnt_list))
print(unique_words[max_index])
만약 cnt_list의 값 중에서 최대값(max)가 여러 개 있다면 (가장 많이 사용된 알파벳이 여러개라면) ?을 출력해준다. 그게 아니라면 cnt_list에서 최대값이 있는 인덱스를 max_index에 저장하고, unique_words의 max_index번째에 있는 값을 출력해준다. (cnt_list와 unique_words의 순서 같으므로 이렇게 해줘도 된다.)
아래의 블로그를 참고했습니다. (무릎을 탁 치고 블로그 구독까지 누르고 왔다.)
'Algorithm > Problem Solving' 카테고리의 다른 글
[Python] 백준/BOJ - 1026번: 보물 (0) | 2021.11.11 |
---|---|
[Python] 백준/BOJ - 11047번: 동전 0 (0) | 2021.10.17 |
[Python] 백준/BOJ - 8958번: OX퀴즈 (0) | 2021.10.16 |
[Python] 백준/BOJ - 5885번: 거스름돈 (0) | 2021.10.15 |
[Python] 백준/BOJ - 11399번: ATM (0) | 2021.10.09 |