본문 바로가기
I can do it on my own!/백준

[백준] 1157번 파이썬(Python)

by zivvon 2023. 5. 26.
목차 접기

문제

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

입력

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

출력

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


'정답 코드'

word = input().upper()
not_dupl_word = list(set(word))

cnt = [] #중복 개수

for i in not_dupl_word:
    cnt.append(word.count(i))

if cnt.count(max(cnt)) > 1:
    print("?")
else:
    max_index = cnt.index(max(cnt))
    print(not_dupl_word[max_index])

 

'돌아보며'

문제 읽자마자 망했음을 직감했다. 왜냐, set(), count() 메소드의 사용법이 기억나지 않았기 때문이다.

좌절 그자체.. 역시 개념은 꾸준히 복습해주는 것이 중요한 듯 싶다.

 

됐고! 

✏️ 개념 복습하기

- upper() : 문자열의 모든 문자들을 대문자로 바꾼 문자열 반환('새로운' 대문자의 문자열이 생성)

- lower() : 문자열의 모든 문자들을 소문자로 바꾼 문자열 반환

- isupper() : string 객체 내부에 있는 모든 문자가 대문자인지 검사하는 함수, 모두 대문자인 경우에만 True 반환

- islower() : string 객체 내부에 있는 모든 문자가 소문자인지 검사하는 함수, 모두 소문자인 경우에만 True 반환

 

- set() 함수

~> 수학에서의 집합과 비슷(순서가 없는 집합)

~> 인덱싱, 슬라이싱 또는 기타 스퀀스와 유사한 동작을 지원하지 않음

~> 특징 : 중복 삭제해줌! (집합은 중복된 데이터를 가질 수 없기 때문)

~> ⚠️ 'set' object is not subscriptable : set() 함수에서 '인덱싱' 및 '슬라이싱'을 시도해서 난 에러

ㄴ why? set자료형으로 생성된 데이터를 인덱싱을 통해 접근하고 싶다면 list() 통해 리스트 형태로 변환 후 인덱싱이나 슬라이싱 진행해줘야 함! list형으로 형변환 하지 않으면 집합형이기 때문에 Error 발생

 

- count() 함수

~> 문자열 자료형에서 사용되는 함수

~> 튜플, 리스트, 집합 자료형과 같이 반복 가능한 iterable 자료형에서도 사용 가능

~> 문자열 내부에서 특정 문자, 또는 문자열이 포함되어 있는지를 카운팅 하여 반환

~> 특정 문자 카운팅 시 대소문자 구별하며, 카운팅 하는 범위 또한 지정 가능

 

- index() 함수

~> 리스트에서 특정 원소의 인덱스를 반환해주는 함수

~> 문자열에서도 인덱스를 찾을 수 있음

~> 중복된 원소가 있으면 가장 작은 인덱스를 리턴