티스토리 뷰

알고리즘

백준 - 1157 파이썬

취뽀가자!! 2023. 9. 20. 23:25

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함