본문 바로가기
알고리즘/백준 알고리즘

[Baekjoon] 백준 알고리즘 - 1157: 단어 공부

by 며루치꽃 2021. 4. 21.

1. 문제

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

2. 내가 생각했던 풀이과정

1) 대소문자를 구분하지 않고, 출력결과가 대문자이기 때문에 upper()함수를 이용하여 단어를 대문자로 바꿔준다.

2) 파이썬의 자료형인 set을 이용하면 중복을 제거할 수 있는데 set으로 중복을 없애준 후에 중복을 없앤 리스트를 넣어준다. 

3) wordlist에 들어있는 리스트들을 반복하면서, 해당 문자가 리스트에 몇 개 있는지를 세어주고, 세어준 값을 cnt 리스트에 넣어준다. 

4) cnt 리스트에 max를 해준다. 이때 2보다 같거나 커야하는 이유는 

예를 들어, cnt 리스트에 [ 4, 5, 1, 3, 6 ] 이면 max는 6이고 이것의 갯수는 1개이다.

하지만, cnt 리스트가 [ 3, 3, 3, 2, 1 ] 일 경우는 max는 3이고 이것의 갯수는 3개가 된다. 

이 경우, 가장 많이 사용된 알파벳이 여러개 존재하는 case이기 때문에 이와 같이 설정한다.

5) 가장 많이 사용된 알파벳이 여러개 존재하는 case가 아닐경우 max(cnt)의 index를 찾고, 이것을 wordlist[index]를 한다. 이 형태가 가능한 이유는 2) 에서 set을 통해 중복이 없이 순서대로 문자가 들어갔기 때문에 가능하다.

 

3. 나의 풀이

word = input().upper()
wordlist = list(set(word))
cnt = []

for i in wordlist:
    wordcount = word.count(i)
    cnt.append(wordcount)

if cnt.count(max(cnt)) >= 2:
    print('?')
else:
    print(wordlist[cnt.index(max(cnt))].upper())

4. 새로 알게된 점

1) set은 중복을 없애는 것이 효과적인 것을 잊지말자

2) count(x)는 리스트 안에 x가 몇 개 있는지 조사하고 그 개수를 돌려준다.

문자열.count(x) 도 가능하다

 

a = ['m', 'i', 's', 'i']
print(a.count('i'))
>>>> 2

 

댓글