백준(BOJ) 문제 풀이

백준 1157번 문제(단어 공부) 파이썬(Python) 풀이 [로밍맨]

로밍맨 2021. 7. 2. 22:39
728x90
반응형

문제 링크

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

정답 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def solve():
  s = input()
  s = s.upper()
  hist = {}
  for c in s:
    if c in hist.keys():
      hist[c] += 1
    else:
      hist[c] = 1
  big = 0
  for key in hist.keys():
    big = max(big, hist[key])
  cnt = 0
  for key in hist.keys():
    if hist[key] == big:
      cnt += 1
      rst = key
  if cnt != 1:
    print("?")
  else:
    print(rst)
 
solve()
 
cs

 

저는 이 문제를 histogram(도수분포표)을 활용하여 풀었습니다.

먼저 대소문자를 구별하지 않고 마지막에 대문자로 출력한다고 하였기 때문에 입력은 모두 대문자로 변경하고,

각 (대)문자에 대해서 몇개씩 존재하는지 그 갯수를 hist 에 저장합니다.

출현빈도가 가장 높은 문자가 하나인지 여러 개인지 파악하기 위해서 일단 가장 큰 값(big)을 찾고,

그 값이 몇 번 등장(cnt)하는지 확인합니다.

 

728x90

 

big 값이 여러개 있다면, 가장 많이 등장하는 문자가 복수개라는 의미이므로 물음표를 출력하고,

그렇지 않다면 가장 많이 등장하는 문자(rst)를 출력합니다.

 

풀이는 아래 영상을 참고 바랍니다.

www.youtube.com/watch?v=STrU8WEyU_E

 

저작권 라이선스: CC BY (출처만 표시하면 자유롭게 이용 가능)

728x90
반응형