본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 1157 단어 공부 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 14.
728x90
반응형

BaekJoon 백준 1157 단어 공부 문제는 알파벳 대소문자로 된 단어가 주어지면, 가장 많이 사용된 알파벳이 무엇인지 알아내는 문제이다. 알파벳을 세는 방법은 반복문과 python의 collection.Counter를 이용한 방법 2가지가 있다. 난이도는 Bronze 1이다.

 

BaekJoon 1157 단어 공부 문제 정보

출처

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

난이도

- 브론즈 1 / Bronze 1

 

단어 공부 문제 요약

  • 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 구하여 출력한다.
  • 단어의 길이는 1,000,000을 넘지 않는다.
  •  대문자와 소문자를 구분하지 않는다.
  • 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는?를 출력한다.

 

문제 풀이 과정

  1. 알파벳을 입력받을 때 upper() 함수를 사용하여 대문자로 변환하여 입력받는다.
  2. 단어의 알파벳이 딕셔너리에 없다면 알파벳을 키로, 값을 1로 하는 원소를 추가하고, 딕셔너리에 있으면 1을 더한다.
    (collection.Counter 클래스를 import 하여 Counter 클래스를 사용하면 똑같은 기능을 한다.)
  3. 최다 빈출 횟수를 구하고, 최다 빈출 된 알파벳을 리스트에 저장한다.
  4. 리스트의 길이가 1이면 알파벳을 출력하고, 2 이상이면?를 출력한다.

 

코드 및 설명
# 방법 1: 반복문을 사용하여 카운트하기
word = input().upper()

# 알파벳 개수 세기
cnt = dict()
for i in word:
    if i in cnt:
        cnt[i] += 1
    else:
        cnt[i] = 1

# 최다 빈출 알파벳 구하기
max = max(cnt.values())
rst = list()
for k, v in cnt.items():
    if v == max:
        rst.append(k)

if len(rst) == 1:
    print(rst[0])
else:
    print('?')

 

# 방법 2: Counter 클래스를 사용하여 카운트하기
from collections import Counter

word = input().upper()
cnt = dict(Counter(word))

# 최다 빈출 알파벳 구하기
# 위 코드와 같다

파이썬 collection 모듈의 Counter 클래스를 사용하면 각 원소를 키, 개수를 값으로 하는 딕셔너리를 쉽게 구할 수 있다.

 

BaekJoon 백준 1157 단어 공부 문제의 난이도는 Bronze 브론즈 1이고, 파이썬 python으로 풀어보았다.

728x90
반응형

댓글