본문 바로가기
Algorithm/Python

백준 - 1157- 단어공부 - Python / set, count 함수

by imagineer_jinny 2021. 3. 8.

1157번: 단어 공부 (acmicpc.net)

 

1157번: 단어 공부

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

www.acmicpc.net

문제

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

입력

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

출력

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

 

 

풀이

words = input().upper()
unique_words = list(set(words))  # 입력받은 문자열에서 중복값을 제거

cnt_list = []
for x in unique_words :
    cnt = words.count(x)
    cnt_list.append(cnt)  # count 숫자를 리스트에 append

if cnt_list.count(max(cnt_list)) > 1 :  # count 숫자 최대값이 중복되면
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list))  # count 숫자 최대값 인덱스(위치)
    print(unique_words[max_index])

C++에서 알파벳들만을 위한 체크 용도로 used배열을 내가 써줬다면 Python에서는 set 함수를 써서 알파벳들의 중복을 없애 순수하게 중복되지 않은 알파벳들을 저장한 리스트를 만들었다. 

그다음에 cnt_list를 따로 만들어서 알파벳들이 몇개 있는지 세는 리스트를 만들었다. 

그 다음 부분이 생소했는데 unique_words에서 for문을 돌려서 카운팅하는 문법이 생소하다.  for in 하고 range만 나온다고 생각했는데 in 뒤에 리스트도 들어갈 수 있구나. count함수도 처음 봤다. count( ) 안에 찾고자하는 것을 넣으면 몇갠지 찾아주는 편리한 기능!

 

못푼 이유: C로는 구현하는걸 파이썬 문법을 모르니까 못하겠음. 일단 C로도 구현이 안되는데 어떻게 시도해..

문법을 모르니까 생각나는게 반복문밖에 없다. 파이썬 문법을 제대로 알고 있어야 풀 것 같다.

 

사용된 문법

 

collections.Counter 클래스

파이썬을 파이썬답게 - 가장 많이 등장하는 알파벳 찾기 - Counter | 프로그래머스 (programmers.co.kr)

 

파이썬을 파이썬답게 - 가장 많이 등장하는 알파벳 찾기 - Counter

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코

programmers.co.kr

set

set은 수학에서 얘기하는 집합과 비슷하다. set은 다음과 같은 특징을 가진다. 

  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered).

참고하기 좋은 사이트: 

18. set(집합) - 파이썬 - 기본을 갈고 닦자! (wikidocs.net)

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

02-6 집합 자료형 - 점프 투 파이썬 (wikidocs.net)

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

max

max(iterable)는 인수로 반복 가능한 자료형을 입력받아 그 최댓값을 돌려주는 함수이다.

>>> max([1, 2, 3])
3
>>> max("python")
'y'

 

list 만들기

list(s)는 반복 가능한 자료형 s를 입력받아 리스트로 만들어 돌려주는 함수이다.

>>> list("python")
['p', 'y', 't', 'h', 'o', 'n']
>>> list((1,2,3))
[1, 2, 3]

list 함수에 리스트를 입력으로 주면 똑같은 리스트를 복사하여 돌려준다.

>>> a = [1, 2, 3]
>>> b = list(a)
>>> b
[1, 2, 3]

 

리스트에 요소 추가 (append)

append를 사전에서 검색해 보면 "덧붙이다, 첨부하다"라는 뜻이 있다. 이 뜻을 안다면 다음 예가 바로 이해될 것이다. append(x)는 리스트의 맨 마지막에 x를 추가하는 함수이다.

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

리스트 안에는 어떤 자료형도 추가할 수 있다.

다음 예는 리스트에 다시 리스트를 추가한 결과이다.

>>> a.append([5,6])
>>> a
[1, 2, 3, 4, [5, 6]]

 

count

 

문자열 안에서 찾고 싶은 문자의 개수를 찾을 수 있다. 어떤 함수는 문자열에서만 사용 가능한 함수도 있는데 count 함수는 튜플, 리스트, 집합과 같은 반복 가능한 iterable 자료형에서도 사용 가능하다.

 

사용방법은 '변수. count(찾는 요소)' 형태로 사용한다. 괄호( ) 안에 찾고자 하는 값을 입력하면 함수를 사용한 변수 안에서 해당 값의 개수를 숫자로 반환한다. 

 

for in

 

for 변수 in 리스트(또는 튜플, 문자열):

       수행할 문장1

       수행할 문장2 ...

 

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.

 

백준 1157번 [파이썬 알고리즘] 단어 공부 (tistory.com)

 

백준 1157번 [파이썬 알고리즘] 단어 공부

[Python] 백준 알고리즘 온라인 저지 1157번 : 단어 공부 Python3 코드 words = input().upper() unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거 cnt_list = [] for x in unique_words..

ooyoung.tistory.com

 

댓글