Algorithm/Problem Solving

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

SH_Roh 2021. 10. 17. 17:15
반응형
 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램 작성하기. (대소문자 구분 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의 순서 같으므로 이렇게 해줘도 된다.)

 

맞았습니다 ㅠ_ㅠ

 

 

아래의 블로그를 참고했습니다. (무릎을 탁 치고 블로그 구독까지 누르고 왔다.)

https://ooyoung.tistory.com/70

반응형