티스토리 뷰
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제 풀이
생각한 문제풀이 방식은 알파벳은 총 26개이기 때문에 배열을 26개로 초기화 해준뒤 아스키 코드를 이용하여 각 인덱스에 사용된 알파벳의 수를 저장하는 것이다. 아래는 이를 코드로 옮겨놓은 것이다.
s = input().lower()
arr = [0]*26
for i in range(len(s)):
arr[ord(s[i])-97] += 1
max_cnt = 0
result = ''
for i in range(len(arr)):
if len(s) == 1:
print(s.upper())
break
if max_cnt < arr[i]:
max_cnt = arr[i]
result = chr(i+97)
elif max_cnt == arr[i]:
result = '?'
if result == '?':
print(result)
else:
print(result.upper())
문제는 풀었지만 시간이 오래 걸렸다.
좀 더 간결한 방식이 있을거 같아 구글링을 해봤다.
이 분의 코드는 파이썬의 내장 함수들을 이용하여 코드도 간결해지고 시간도 많이 단축하였다.
set함수의 중복값을 제거해주는 특징을 활용한것이 가장 눈에 띄었고, 각 알파벳이 사용된 횟수가 저장된 리스트에서 다시 한번 더 count함수를 이용하여 가장 많이 사용된 알파벳이 여러개인 경우를 구현한 것이 인상적이었다.
words = input().upper()
unique_words = list(set(words))
cnt_list = []
for x in unique_words:
cnt = words.count(x)
cnt_list.append(cnt)
if cnt_list.count(max(cnt_list)) > 1:
print('?')
else:
max_index = cnt_list.index(max(cnt_list))
print(unique_words[max_index])
느낀점
브론즈 수준의 문제였고, 스스로 풀긴 했지만 간결하고 빠르게 짜는것은 실패하였다. 파이썬은 기본 내장함수가 강력하니 이것들을 잘 활용하면 좀 더 간결한 코드를 구현할 수 있을 것이기에 자주 사용되는 내장함수의 기능과 특징들은 기억해둬야 되겠다. 최소한 여기서 사용된 함수들의 특징과 기능이라도 말이다..!
'알고리즘' 카테고리의 다른 글
백준 25206 - 파이썬 (0) | 2023.09.25 |
---|---|
백준 1316 - 파이썬 (2) | 2023.09.25 |
백준 11718 - 파이썬 (0) | 2023.09.16 |
백준 3109 - 파이썬 (1) | 2023.09.11 |
백준 1080 - 파이썬 (0) | 2023.08.06 |
댓글