개발일기

백준 1371번 파이썬 풀이 : 가장 많은 글자 본문

알고리즘 문제풀이/백준

백준 1371번 파이썬 풀이 : 가장 많은 글자

한민기 2021. 9. 21. 23:27
반응형

문제 링크 : https://www.acmicpc.net/problem/1371

 

1371번: 가장 많은 글자

첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다. 그리고 적어도 하나의 알파벳이 있다.

www.acmicpc.net

문제

영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.

어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.

입력

첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다. 그리고 적어도 하나의 알파벳이 있다.

출력

첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

 

# 문제 풀이 ( 알고리즘 분류 : 문자열 )

파이썬에서 문자열을 입력받을 때 eof 날때까지 입력받는 방법에는 2가지가 있다.

1
2
3
4
5
6
7
8
9
10
11
#sys read
import sys
line = sys.stdin.read()
 
#try except
line = ''
while True:
    try:
        line = input()
    except EOFError:
        break
cs

sys를 사용하는 방법try except를 사용하는 방법 총 2가지가 있다.

 

1
2
3
4
import sys
 
= sys.stdin.read()
li = [0]*26
cs

sys를 사용하여 문장 전체를 입력 받으며 li 배열에 카운트하기 위해서 알파뱃의 개수인 26개 만큼 만들어 준다.

 

1
2
3
for c in s:
    if c.islower():
        li[ord(c)-97+= 1
cs

단어 하나씩을 카운트하며 소문자로 변환 후 아스키코드 변환 a의 아스키 코드인 97을  빼주게 되면 a의 index가 0부터 시작이 되게 되며 카운트 할 수 있다.

 

1
2
3
for i in range(26):
    if li[i] == max(li):
        print(chr(97+i), end='')
cs

0부터 25까지 반복하며 제일 많이 사용된 문자열을 출력하면된다.

여기서 max 를 사용하여도 되지만 일일이 반복한 이유는 제일 많이 사용된 문자열이 여러개일 경우 출력하기 힘들기 때문에 그냥 일일이 반복하였다.

 

 

반응형
Comments