본문 바로가기
Problem Solvings & Algorithm/백준

[백준] 1371: 가장 많은 글자 (feat. EOF) - Swift

by abcdesong 2021. 1. 24.

노션에서 보기

 

1371: 가장 많은 글자

🙋‍♀️ 백준 1371번 <가장 많은 글자>의 풀이

www.notion.so

문제

 

1371번: 가장 많은 글자

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

www.acmicpc.net

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

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

입력

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

출력

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

 


풀이

var text = ""
while let sentence = readLine() { text += sentence }

var dic = [Character:Int]()
for crt in text {
    if crt.isLetter { dic[crt] = dic[crt] == nil ? 1 : dic[crt]! + 1 }
}

let L = dic.values.max()
let als = "abcdefghijklmnopqrstuvwxyz".map{ $0 }

for a in als {
    if dic[a] == L { print(a, terminator: "") }
}

이 문제의 포인트는 입력을 읽어 오는 것이었다.

 

줄바꿈을 포함한 텍스트도 입력으로 들어올 수 있으므로 line 단위가 아닌 end of file,

일명 EOF를 판단해서 끝까지 읽어와야 한다!

 

EOF는 while let을 통해 판단할 수 있었다.

 

그리고 Dictionary를 활용하여 나머지 작업을 수행해주었다.

문제는 간단한데 EOF라는 것을 처음 알게되어 기록으로 남김🙂

 

🤷‍♀️ 입력 창에서 EOF를 선언하는 방법?

Command Line Tool은 control + d 입력을 받으면 EOF에 도달한 것으로 판단한다.

입력의 시작 지점이 아닌 이상 2번을 입력해야만 EOF인 것으로 판단하는데, 이는 유닉스 기반 운영체제들의 특징이라고 한다.

 

그럼..

끝!

댓글