[Baekjoon/Python] 백준 온라인 저지 1157번 : 단어 공부
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제 ::
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력 ::
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력 ::
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 ::
Mississipi
예제 출력 ::
?
정답 코드 ::
word = input().upper()
word_list = list(set(word))
cnt = []
for i in word_list:
count = word.count(i)
cnt.append(count)
if cnt.count(max(cnt)) >= 2:
print("?")
else:
print(word_list[(cnt.index(max(cnt)))])
아니 이건.., 알고리즘부터 구상이 안되었다.
처음에 우선 입력을 받고 대소문자 구분을 하지 않으니까 소문자로 lower()로 하였으나, 출력할 때 대문자로 출력하길래 처음부터 upper()로 입력을 받고자까지는 했다.
문제는 여기부터 생각이 떠오르지가 않던 것.
첫번째로 든 생각
for문으로 입력받은 값만큼 반복을 해서 입력한 단어들의 숫자를 count로 수를 뽑아내어 count가 가장 높은 문자를 출력하기.
그런데 어떻게 해야할지가 너무 막막했던 것이다.
최종적으로 푼 풀이 알고리즘이다.
- 대문자로 단어를 입력받는다.
- 입력한 단어들을 set()을 통해 중복되는 문자들을 걸러준다. 예를 들어 word = Mississipi같은 경우는 중복되는 s와 i를 걸러 word_list에는 M, I, S, P 이 4가지만 들어가게 된다.
- M, I, S, P의 개수가 몇개인지만 세면 되므로 범위를 word_list로 지정하여 for문을 돌린다. 각 문자가 몇개씩 있는지 세야하므로 count를 통해 처음 입력한 word의 단어 중 M, I, S, P의 개수를 찾는다. 1, 4, 4, 1이 나올 것이다. 그리고 그 값을 cnt = []에 넣어준다.
- if문을 통해 cnt 리스트 안의 값 중 들어있는 가장 큰 수가 2개 이상일 때 ?을 출력한다.
- 2개 이상이 아닐 시 출력을 하면 끝.
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon/Python] 백준 2908 : 상수 (0) | 2021.03.17 |
---|---|
[Baekjoon/Python] 백준 1152 : 단어의 개수 (0) | 2021.03.17 |
[Baekjoon/Python] 백준 2675 : 문자열 반복 (0) | 2021.03.17 |
[Baekjoon/Python] 백준 10809 : 알파벳 찾기 (0) | 2021.03.15 |
[Baekjoon/Python] 백준 11720 : 숫자의 합 (0) | 2021.03.15 |