https://www.acmicpc.net/problem/1371
1371번: 가장 많은 글자
첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다. 그리고 적어도 하나의 알파벳이 있다.
www.acmicpc.net
<풀이>
소문자의 개수를 세어 가장 많은 문자를 출력하면 된다. 만약 여러 문자인 경우 사전 순으로 출력하면 된다.
따라서 글을 입력받아 한글자씩 글자의 개수를 세어준다. 그다음 글자의 개수를 비교하여 가장 많이 나온 글자를 출력한다.
<입력>
import sys
alphabet = {chr(i): 0 for i in range(97, 123)}
for line in sys.stdin:
for i in line:
if i in alphabet:
alphabet[i] += 1
EOF를 위해 sys를 import해준다.
소문자만 입력되므로 딕셔너리 형태로 개수를 세어준다. chr( ) 함수는 ASCII코드에 해당하는 숫자를 문자로 변환시켜준다. a의 아스키코드 값은 97이고, z는 122이므로 97부터 122까지 chr에 넣어 key로 소문자를 모두 설정해준다.
sys.stdin 입력이 있는 동안 for문을 반복해준다. 입력은 line에 저장되고 line에 한 글자씩 소문자인지 확인해준다. 공백이나 개행 문자도 포함될 수 있기 때문이다. 해당 문자에 해당하면 개수를 1 증가시킨다.
<출력>
mostChar = []
numChar = 0
for i in alphabet:
if alphabet[i] > numChar:
mostChar = [i]
numChar = alphabet[i]
elif alphabet[i] == numChar:
mostChar.append(i)
mostChar.sort
print(''.join(mostChar))
가장 많이 등장한 문자를 담을 mostChar을 선언한다. 여러 개 일 수 있으므로 리스트 형태로 선언한다. 그리고 많이 나온 문자가 몇 번 나왔는지를 numChar에 저장해준다.
alphabet에 담긴 모든 key를 돌면서 개수를 확인하여 numChar보다 큰 경우 가장 많이 나온 문자를 해당 문자로 바꿔주고, 가장 많이 나온 개수를 해당 문자의 개수로 설정한다.
만약 numChar와 문자가 나온 개수가 똑같은 경우 mostChar에 해당 문자를 추가해준다.
사전 순으로 출력해야 하므로, mostChar를 정렬해주고, 해당 list를 출력한다.
<전체 코드>
import sys
alphabet = {chr(i): 0 for i in range(97, 123)}
for line in sys.stdin:
for i in line:
if i in alphabet:
alphabet[i] += 1
mostChar = []
numChar = 0
for i in alphabet:
if alphabet[i] > numChar:
mostChar = [i]
numChar = alphabet[i]
elif alphabet[i] == numChar:
mostChar.append(i)
mostChar.sort
print(''.join(mostChar))
'# Coding > # 백준' 카테고리의 다른 글
[백준 / 1547] 공 - Python (0) | 2021.04.05 |
---|---|
[백준 / 1357] 뒤집힌 덧셈 - Python (0) | 2021.04.05 |
[백준 / 1526] 가장 큰 금민수 - Python (0) | 2021.04.05 |
[백준 / 1051] 숫자 정사각형 - Python (0) | 2021.04.02 |
[백준 / 1350] 진짜 공간 - Python (0) | 2021.04.02 |