본문 바로가기
[Python] Baekjoon/Brute force(브루트포스)

[백준(Baekjoon)] 1157 단어 공부

by 파크영 2021. 10. 6.

문제

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

 

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

 

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

입력 출력
Mississipi ?
zZa Z
z Z
baaa A

나의 풀이

[Python(파이썬)]

str1 = input().upper()	# 입력받은 문자열의 문자를 모두 대문자로 변환
str2, strcnt = set(str1), []	# str1 문자열에서 중복 문자를 제거하기 위해 set()으로 변환
for i in str2:	# 문자열에 있는 문자가 각각 몇 개씩 있는지 저장
    strcnt.append(str1.count(i))

print(list(str2)[strcnt.index(max(strcnt))]) if strcnt.count(max(strcnt)) == 1 else print('?')

 

 


풀이 과정

  • TypeError: 'set' object is not subscriptable
print(str2[strcnt.index(max(strcnt))]) if strcnt.count(max(strcnt)) == 1 else print('?')

처음 출력 부분을 다음과 같이 set(집합) 형태에서 바로 인덱스에 접근해 가져오는 방법을 선택했다.

하지만 TypeError: 'set' object is not subscriptable 발생

 

이유는 set은 순서가 없는 중복이 불가능한 자료형이기 때문이었다. 

set은 원소의 위치를 저장하지 않기 때문에 원소간의 순서가 없어 인덱싱이 불가능하다. 

따라서 set()형태의 str2를 list로 바꾼 후 인덱싱 해야했다. 

 

str2[strcnt.index(max(strcnt))] -> list(str2)[strcnt.index(max(strcnt))]

 

 

 

[Python(파이썬)] TypeError: 'set' object is not subscriptable

[Python(파이썬)] 세트(set) 세트 (set) 중복된 데이터를 허용하지 않는다. 비순차 자료형, 가변 자료형 인덱스로 접근 불가하다. 항목들을 {} 로 감싸고 각각의 항목은 쉼표(,)로 구분한다. 집합 선언

young-library.tistory.com


문제 출처

 

1157번: 단어 공부

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

www.acmicpc.net

 

댓글