문제
영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 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
인 것으로 판단하는데, 이는 유닉스 기반 운영체제들의 특징이라고 한다.
그럼..
끝!
'Problem Solvings & Algorithm > 백준' 카테고리의 다른 글
[백준] 1052: 물병 - Swift 풀이 (0) | 2021.01.10 |
---|---|
[백준] 10757: 큰 수 A+B - Swift 풀이 (0) | 2021.01.10 |
[백준] 1076: 저항 - Swift (0) | 2021.01.06 |
[백준] 1009: 분산 처리 - Swift (0) | 2021.01.06 |
[백준] 4673: 셀프 넘버 - Swift (0) | 2021.01.03 |
댓글