https://www.acmicpc.net/problem/1157
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에 적용하여 문자를 찾는다.
728x90
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 1316 그룹 단어 체커 파이썬 풀이 (문자열) (0) | 2021.06.19 |
---|---|
[백준] 2941 크로아티아 알파벳 파이썬 풀이 (0) | 2021.06.16 |
[백준] 4673 셀프 넘버 파이썬 풀이 (0) | 2021.06.15 |
[백준] 4344 평균은 넘겠지 파이썬 풀이 (0) | 2021.06.15 |
[백준] 1110 더하기 사이클 파이썬 풀이 (1) | 2021.06.15 |