Python/백준 알고리즘

[BaekJoon/Python] : 백준 1157번 - 단어 공부

우준세 2021. 1. 8. 16:57
728x90
반응형

 

이번 포스팅은 www.acmicpc.net/problem/1157에서 푼 것을 토대로 작성했습니다.

문자열의 다섯 번째 문제인 단어 공부입니다.

 

문제

 

문제를 보고 저 나름대로 해석을 먼저 했습니다.

1. 알파벳 대소문자로 된 단어를 입력받는다.

2. 입력된 알파벳 중에 가장 많이 입력된 알파벳을 대문자로 출력한다. 

- 대소문자 구분 x 

3. 가장 많이 입력된 알파벳이 여러 개 라면? 를 출력한다.

이렇게 두고 코드를 어떻게 진행할지 생각해 보았습니다.

 


Python 코드

s = input().upper()

s_set = list(set(s)) # 입력받은 문자열에서 중복 값 제거하여 정렬(무작위)

cnt = []

for i in s_set : 
    cnt.append(s.count(i))  # 입력의 count를 cnt 리스트에 추가 

if cnt.count(max(cnt)) > 1 : 
    print("?")  
    
else :
    print(s_set[cnt.index(max(cnt))])

Python 코드 풀이

s = input().upper()

s_set = list(set(s)) # 입력받은 문자열에서 중복 값 제거하여 정렬(무작위)

 

입력받은 문자열 S에서 

set을 이용하여 중복 값을 제거하였고 list로 만들었습니다.

 

cnt = []

for i in s_set : 
    cnt.append(s.count(i))  # 입력의 count를 cnt 리스트에 추가

 

cnt 리스트에 입력받은 문자열의 알파벳 개수를 추가시켜 줍니다.

알파벳 개수가 추가되는 순서는 s_set에서 정렬된 순서와 같습니다.

 

if cnt.count(max(cnt)) > 1 : 
    print("?")  
    
else :
    print(s_set[cnt.index(max(cnt))])

 

그리고 if문으로 cnt 리스트에서 가장 높은 숫자의 개수가 2개 이상일 때 

즉, s.count()에서 나온 알파벳에서 가장 많이 있는 알파벳 개수가 2개 이상일 때 

"? "를 출력하게 만들고 

 

else를 사용하여

s_set 리스트의 알파벳 순서와 cnt 리스트의 알파벳 개수 순서가 동일하기 때문에 

가장 높은 숫자 위치를 s_set으로 적용하여 

가장 많은 개수의 알파벳을 출력하게 만들었습니다. 

 

 

위의 코드에서 어떻게 적용되는지 이해를 쉽게 하기 위해 

예시를 들었습니다.

 

 

다음 포스팅으로 찾아오겠습니다 :) 

 

 

 

728x90
반응형