알고리즘/백준 문제풀이

[백준] 1157 단어공부 파이썬 풀이

자바칩 프라푸치노 2021. 6. 16. 17:26

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에 적용하여 문자를 찾는다.

 

728x90