[백준] 1157 단어공부 파이썬 풀이
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
1
2
3
4
5
6
7
8
9
10
11
12
13
|
words = input().upper()
unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거
cnt_list = []
for x in unique_words :
cnt = words.count(x) #입력받은 문자에 x가 몇개 나온지 센다.
cnt_list.append(cnt) # count 숫자를 리스트에 append
if cnt_list.count(max(cnt_list)) > 1 : # cnt_list에서 가장 많이 나온 숫자가 2개이상이면
print('?')
else :
max_index = cnt_list.index(max(cnt_list)) # count 숫자 최대값 인덱스(위치)
print(unique_words[max_index])
|
cs |
말로 풀어서 풀이
Mississipi를 입력받으면 어짜피 마지막에 출력은 대문자로 하라고 했으니 대문자로 MISSISSIPI로 받는다.
그리고 여기서 나온 문자만 따로 빼서 set에 넣는다. set은 중복값을 허용하지 않으니 딱 문자 하나씩 들어간다.
그럼 여기서는 set에 M, I S, P가 들어가있다.
그리고 그 set을 돌면서 하나씩 꺼내서
입력받은 문자에 포함되어있는 개수가 몇개인지 센다.
그리고 그것을 cnt_list에 넣는다
MISSISSIPI로 예를들면 M은 1개 나왔고 I는 4개, S도 4개 P는 1개 나왔다.
개수가 똑같은 문자가 있으면 ?를 출력하라고 했으니까
cnt_list에서 최대값인 인덱스가 1개보다 많으면 ?를 출력하고
아니라면 그 문자를 출력해야한다.
그 문자는 cnt리스트에서 가장 많이 나온 숫자가 있는 인덱스를 구하고
set에서 그인덱스를 적용한다.
정리
1. 입력값을 대문자로 받는다
2. 중복 제거한 문자만 set에 넣는다
3. set을 하나씩 돌면서 입력값에 몇 개 들어가있는지 찾아서 cnt_list에 넣는다
4. cnt_list에서 최대값이 여러개면 ?를 출력하고
5. 하나이면 그 최대값이 있는 인덱스를 구해서 set에 적용하여 문자를 찾는다.