[1157] 백준 문제풀이 - 단어 공부

https://www.acmicpc.net/problem/1157

문제

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

입력

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

출력

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

Python Code

내장함수의 사용방법에 대해서 잘 알고, 활용을 할 줄 알아야하는 문제였다.

1
2
3
4
5
6
7
8
9
10
11
12
word = list(str(input().upper())) # 받아온 문자열을 전부 대문자로 바꾸고 리스트형에 집어넣음
filter_word = list(set(word))

cnt = []
for filter_cnt in filter_word:  # set으로 중복값을 제거한 리스트의 요소를 하나씩 꺼내옴
    count = word.count(filter_cnt)
    cnt.append(count)

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

코드의 진행은 다음과 같다.

  1. 받아온 문자열을 전부 대문자(upper)로 바꾸고 list형에 저장함
  2. set함수를 활용해 받아온 문자열의 중복값을 제거하고 새 리스트에 저장함
  3. 새 리스트 filter_word 의 요소들을 for문을 활용해셔 하나씩 사용한다.
  4. 3번의 요소와 원래 word 리스트를 count함수를 이용해 word 리스트의 중복값의 갯수를 세준다.
  5. 세 준 중복값의 갯수들은 각각 cnt라는 빈 리스트에 저장한다.
  6. cnt리스트의 max함수의 값이 1 이상일 경우 ?를 출력하고 아닐 경우에는 최대 중복값을 출력한다.

댓글남기기