알고리즘/BOJ

[BOJ] 1157 - 단어 공부

서노리 2022. 1. 6. 23:34
반응형

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

 

나의 코드

data = input()
data = data.upper()
count = [0] * 26

for i in data:
    index = ord(i) - ord('A')
    count[index] += 1

max = 0    
for i in range(len(count)):
    if max < count[i]:
        max = count[i]
        max_alpha = i
        
result = chr(ord('A') + max_alpha)
count.sort(reverse=True)
if count[0] == count[1]:
    print("?")
else:
    print(result)

 

나의 아이디어는 먼저 대문자로 문자열을 통일한 후 A부터 Z까지를 리스트에서 0부터 26 인덱스로 하여 그 개수를 저장하는 것이었다. 아스키코드를 이용하여 그것을 구현할 수 있었고 정답은 맞았지만 조금 정신 없다는 느낌을 많이 받아서 다른 코드를 찾아보았다.

 

다른 코드

words = input().upper()
unique_words = list(set(words))  # 입력받은 문자열에서 중복값을 제거

cnt_list = []
for x in unique_words :
    cnt = words.count(x)
    cnt_list.append(cnt)  # count 숫자를 리스트에 append

if cnt_list.count(max(cnt_list)) > 1 :  # count 숫자 최대값이 중복되면
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list))  # count 숫자 최대값 인덱스(위치)
    print(unique_words[max_index])

 

배울 점

코드 처음에서 set()을 통해 중복 값을 왜 제거하는지 처음엔 몰랐는데 중복이 없는 알파벳의 집합을 통해 count() 함수로 그 개수를 세어 문제를 푸는 것이 참신하고 좋은 아이디어인것 같다. 이 방법을 쓰면 내가 아스키코드로 횟수를 계산하는 과정을 안해도 되서 코드가 엄청 짧아질 수 있다.

 


다른 코드 출처: https://ooyoung.tistory.com/70

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 18352 - 특정 거리의 도시 찾기  (0) 2022.01.16
[BOJ] 4673 - 셀프 넘버  (0) 2022.01.14
[BOJ] 5622 - 다이얼  (0) 2022.01.09
[BOJ] 1439 - 뒤집기  (0) 2022.01.04
[BOJ] 11047 - 동전 0  (0) 2021.12.31