본문 바로가기

PS/백준

[백준 1157번 ] 단어 공부 (파이썬/python)

728x90

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

내가 처음 푼 풀이는

전부 대문자로 받은 후 리스트에

아스키코드를 이용해 A ~ Z 까지 탐색하며

[알파벳,사용횟수] 를 넣고

사용횟수에 따라 내림차순으로 정렬을 해서 문제를 풀었다.

이 풀이를 첫 번쨰 코드에 올린다.

 

set을 이용한 또 다른 풀이가 있다.

set을 이용하면 중복을 제거할 수 있어서 효율적으로 풀 수 있다.

 

 

 

내가 처음 푼 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
 
input = sys.stdin.readline
 
voca = input().upper()
max_num = 0
alpha_list = []
 
for i in range(6591):
    num = voca.count(chr(i))
    alpha_list.append([chr(i), num])
 
# 횟수를 기준으로 내림차순 정렬
alpha_list = sorted(alpha_list, key=lambda x: -x[1])
if alpha_list[0][1!= alpha_list[1][1]:
    print(alpha_list[0][0])
else:
    print("?")
 
cs

 

 

set을 이용한 더 효율적인 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
 
input = sys.stdin.readline
 
voca = input().strip().upper()
uniq_voca = list(set(voca))
 
count_list = []
for u in uniq_voca:
    cnt = voca.count(u)
    count_list.append(cnt)
 
if count_list.count(max(count_list)) > 1:
    print("?")
else:
    max_idx = count_list.index(max(count_list))
    print(uniq_voca[max_idx])
 
cs
728x90