알고리즘 문제(SOL)

[백준/1371/파이썬] 가장 많은 글자

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

 

1371번: 가장 많은 글자

첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이

www.acmicpc.net

Problem

  • 영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.
  • 어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.

조건

  • 첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이상 있다.
  • 첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

SOL

쉬운 문제이지만, 문자열 처리를 위해서 짚어야하는 개념들이 상당히 잘 들어있는 문제이다.

 

파이썬에서 문자를 EOF(End of File)까지 입력 받는방법

  • 1. sys.stdin.read() 이용하기
    • 입력받을때, sys.stdin.read()를하게되면, EOF까지 모든 문자열을 입력받을 수 있다.
  • 2. Try,except 구문 이용하기
    • 무한반복문을 이용해서, EOF error가 발생하면 break 해주기.

알파벳을 아스키 코드를 이용해서, 배열에 담기 

문자열을 다룰때, 많이 쓰는 테크닉 중 하나이다. 아스키코드 "97 ==a ,65==A" 라는건 기억하고 있는게 좋다.

  • 문자열 -> 아스키 코드 :  ord(문자열) 
  • 아스키코드 ->문자열 : chr(아스키코드)
import sys

lines=sys.stdin.read()
alphabet=[0 for _ in range(26)]
for line in lines:
    if line.islower():
        alphabet[ord(line)-97]+=1

for i in range(26):
    if alphabet[i]==max(alphabet):
        print(chr(i+97),end="")