반응형
https://www.acmicpc.net/problem/1157
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
text = input()
# 대소문자를 구분하지 않기 때문에 하나로 통합한다
text.lower()
max_num = 0
max_text = ''
for i in text:
num = text.count(i)
if num > max_num:
max_num = num
max_text = i
print(max_text)
처음에는 이런식으로 작성해보았으나 이렇게 되면 첫번째 예제인 mississipi처럼 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 가장 앞에 있는 알파벳을 출력하게 되기 때문에 틀린다.
counting 정렬을 이용하면 될 것 같은데 카운팅 정렬의 경우 카운팅할 숫자가 비교적 적은 경우라고 생각하는데 a~z를 모두 카운팅 하는 것은 비효율적이라고 생각했다.
그렇다고 만약 max_num이 num과 같다면 ?출력한다 라고 작성하기에는 가장 많은 수를 카운팅 하기 전에 같은 수의 알파벳이 발생하는 경우 ?를 출력해버리는 경우가 발생...
text = input()
text = text.upper()
print(text)
text_list = list(set(text))
print(text_list)
print(text)
counts = [0]*(len(text_list))
for i in range(len(text_list)):
counts[i] = text.count(text_list[i])
max_num = max(counts)
max_num_count =0
print(counts)
for count_num in counts:
if max_num == count_num:
max_num_count += 1
if max_num_count == 1:
print(text_list[counts.index(count_num)])
else:
print('?')
이후 set을 통해 코드를 짜보았지만 이런식으로 짜니 답이 랜덤으로 틀리는 문제가 발생했다 ( 답이 랜덤하게 틀린다 = 틀린거 )
원인을 찾다보니
if max_num_count == 1:
print(text_list[counts.index(count_num)])
여기서 index값으로 count_num을 받고있는것을 발견
max_num으로 변경해주었다
최종코드
text = input()
text = text.upper()
text_list = list(set(text))
counts = [0]*(len(text_list))
for i in range(len(text_list)):
counts[i] = text.count(text_list[i])
max_num = max(counts)
max_num_count =0
# print(text_list)
# print(counts)
for count_num in counts:
if max_num == count_num:
max_num_count += 1
if max_num_count == 1:
print(text_list[counts.index(max_num)])
else:
print('?')
반응형
'study > 백준' 카테고리의 다른 글
[백준] 2908번 상수 : python (0) | 2021.09.11 |
---|---|
[백준] 1152번 단어의 개수 : python (0) | 2021.09.11 |
[백준] 2675번 문자열 반복 : python (0) | 2021.09.11 |
[백준] 10809번 알파벳 찾기 : python (0) | 2021.09.10 |
[백준] 11720번 숫자의 합 : python (0) | 2021.09.09 |