1. 문제
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
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[Baekjoon] 백준 알고리즘: 1010 - 다리놓기 (0) | 2021.05.17 |
---|---|
[Baekjoon] 백준 알고리즘: 1920번 - 수 찾기 (0) | 2021.05.06 |
[Baekjoon] 백준 알고리즘 - 11047: 동전 0 (0) | 2021.03.26 |
[Baekjoon] 백준 알고리즘: 11399번- ATM (0) | 2021.03.23 |
[Baekjoon] 백준 알고리즘: 11650 - 좌표정렬하기 (0) | 2021.03.21 |
댓글