Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 클라우드란?
- 블록체인
- 10814
- 클라우드가 뭐야
- Make sure the Cursor is initialized correctly before accessing data for it.
- 포너블
- Docker
- cmd1
- cmd2
- pwable.kr
- 쏘큩
- 6566
- 애너그램 그룹
- 액션바 필요없숴
- tlqkf
- col -1 from CursorWindow
- pwnable
- 나이순 정렬
- kotlin
- SQLiteConstraintException
- 코틀린
- python
- 페니빙
- java.lang.IllegalStateException
- Couldn't read row 0
- UNIQUE constraint failed
- 백준
- Drive-By-Download
- pwnable.kr
- 파이썬
Archives
- Today
- Total
푸르미르
[python]1157.단어 공부 본문
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하는 문제이다. 알파벳 대소문자 구분없이 가장 많이 사용된 알파벳을 대문자로 출력해 내야하기 때문에 입력된 단어의 글자를 모두 대문자화 시키고 시작했다.
첫번째 짠 코드를 보면,
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(0, len(ualn)):
if Max==ualn[i]:
location.append(i) #해당 숫자로 쓰인 글자의 인덱스를 보관
if len(location)==1: #가장 많이 쓰인 글자가 딱 한개일 때
print(ual[location[0]])
else: #가장 많이 쓰인 글자가 2개일 때(두 글자가 쓰인 수가 같을 경우)
print('?')
|
cs |
이렇게 하여 맞았다는 결과를 얻어 낼 수 있었다. ual리스트의 어떠한 한 글자가 입력값에서 쓰인 수가 ualn리스트에 저장이 되어있는데, 그 둘의 index가 같음을 이용하였다.
'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 |