알고리즘/백준

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

번잔중 2022. 4. 7. 18:44
 

1157번: 단어 공부

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

www.acmicpc.net

 

문제

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

 

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

 

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
word = input().upper()
data = [0 for _ in range(len(alpha))]

for i in word:
    data[alpha.index(i)] += 1

cnt = 0
for j in data:
    if j == max(data):
        cnt += 1
        if cnt > 1:
            print("?")
            break
if cnt == 1:
    print(alpha[data.index(max(data))])

 

 

이 문제는 입력받은 문자열 중에서 가장 많이 반복되는 알파벳을 반환해야 합니다. 만약 반복되는 알파벳의 개수가 동일한 경우가 있다면 물음표(?)를 출력합니다.

 

대문자 A부터 Z까지 순차적으로 입력된 alpha라는 변수를 만들고 alpha라는 자리에 대응하는 인덱스의 개수를 카운트해주기 위한 리스트 data를 만들었습니다. 입력받는 문자열을 대문자로 변환하기 위해 upper()를 사용했습니다. 그 다음 입력받은 단어의 알파벳이 위치한 인덱스의 값을 증가시켜 몇 번 반복된 알파벳인지 확인합니다. 그 후 data의 최대값이 하나만 존재하는지 확인하기 위해 cnt를 사용해서 최대값의 개수를 확인해줍니다. 만약 cnt가 1보다 커진다면 최대값이 하나 이상 존재하므로 물음표를 출력합니다. 이후 cnt가 하나인 경우만 출력할 수 있도록 합니다.

 

알게된지는 오래된 문제입니다. 여태 못풀다가 요번에 다시 풀었습니다. 하핳

피드백은 언제나 환영합니다.