반응형
https://www.acmicpc.net/problem/1157
나의 코드
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 |