푸르미르

[python]1157.단어 공부 본문

Baekjoon Online Judge

[python]1157.단어 공부

((•_•)) 2021. 1. 4. 19:47

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하는 문제이다. 알파벳 대소문자 구분없이 가장 많이 사용된 알파벳을 대문자로 출력해 내야하기 때문에 입력된 단어의 글자를 모두 대문자화 시키고 시작했다.

첫번째 짠 코드를 보면,

 

1
2
3
4
5
6
7
8
9
10
11
12
from collections import Counter
 
alpha=input().upper() #대문자화
counter=Counter(alpha) #Counter 생성
list1=counter.most_common(2#가장 많이 쓰인 최빈값이 index가 0, 두번째로 많이 쓰인 값이 index가 1
list2=list(list1[0]) #첫번째로 가장 많이 쓰인 것(형태:많이 쓰인 문자, 그 문자가 쓰인 횟수)를 list화
list3=list(list1[1]) #2번째로 많이 쓰인 것(형태:많이 쓰인 문자, 그 문자가 쓰인 횟수)을 list화
if list2[1]==list3[1]:
    print('?')
else:
    print(list2[0])
cs

 

이렇게 짰다. 이 문제에서 원하는 답이 나오긴 했으나 사이트에 코드를 제출하였더니 런타임 에러가 발생하였다. 알고보니 list1에서의 type이 List이긴했으나 List[Tuple[str, int]]타입이었던 것이었다. 그래서 list1[0]은 튜플 타입이다.  튜플은 값을 변화시킬 수 없기때문에 list2와 list3에 list1[0]의 타입을 list로 바꾸어 저장할 수 없었던 것이었다. 이생각을 못했다... 충격받았다.

 

그래서 Counter을 사용한 다른 코드로

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from collections import Counter
 
alpha=input().upper()
if len(alpha) == 0:
    print('?')
elif len(alpha) == 1:
    print(alpha[0])
else:
    counter=Counter(alpha)
    list=counter.most_common(2)
    tuple1=list[0]
    tuple2=list[1]
    if tuple1[1== tuple2[1]:
        print('?')
    else:
        print(tuple1[0])
cs

 

이렇게 하였더니 맞았고,

또 Counter을 사용하지 않고 코드를 짠다면,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
alpha=input().upper()
ual=list(set(alpha)) #어떤 글자가 쓰인 것인지 보관
ualn=[] #각 글자가 몇번 쓰인 것인지 그 수 보관
location=[] #가장 많이 쓰인 글자의 위치
for i in ual: 
    ualn.append(alpha.count(i)) #입력값에서 글자가 몇번쓰인것인지
Max=max(ualn) #몇 번이 가장 많이 쓰인것인지 그 수를 보관
for i in range(0len(ualn)):
    if Max==ualn[i]:
        location.append(i) #해당 숫자로 쓰인 글자의 인덱스를 보관
if len(location)==1#가장 많이 쓰인 글자가 딱 한개일 때
    print(ual[location[0]])
else#가장 많이 쓰인 글자가 2개일 때(두 글자가 쓰인 수가 같을 경우)
    print('?')
cs

이렇게 하여 맞았다는 결과를 얻어 낼 수 있었다. ual리스트의 어떠한 한 글자가 입력값에서 쓰인 수가 ualn리스트에 저장이 되어있는데, 그 둘의 index가 같음을 이용하였다.

 

www.acmicpc.net/problem/1157

'Baekjoon Online Judge' 카테고리의 다른 글

[python]1316.그룹 단어 체커  (2) 2021.01.06
[python]2941.크로아티아 알파벳  (0) 2021.01.06
[python]1065.한수  (0) 2021.01.04
[python]4673.셀프넘버  (0) 2021.01.04
[python]15596.정수 N개의 합  (0) 2021.01.02