문제

코드
fun main() {
val str = readln().uppercase()
val count = IntArray(26)
var maxCount = 0
var maxIndex = 0
for (c in str) {
count[c.code - 65]++
}
for (i in count.indices) {
if (count[i] == count.max()) {
maxCount++
maxIndex = i
}
}
if (maxCount > 1) println("?")
else println((maxIndex + 65).toChar())
}
단순하게 풀었을 때
fun main() {
val str = readln().uppercase()
val count = IntArray(26)
for (c in str) {
count[c.code - 65]++
}
val maxCount = count.max()
val maxIndex = count.withIndex().filter { it.value == maxCount }.map { it.index }
if (maxIndex.size > 1) println("?")
else println((maxIndex[0] + 65).toChar())
}
조금 더 코틀린스러운 버전
풀이
대소문자 구분이 없기 때문에 소문자 또는 대문자로 전부 변환해준다.
해당 글자에 각 알파벳이 몇 개 있는지 저장하기 위한 배열 생성 -> 알파벳 개수만큼의 크기를 가지는 배열로 선언
입력받은 문자열에서 한 문자씩 확인하면서 개수를 센다
이때 아스키 코드를 사용하면 쉬워진다
A 는 65, B는 66, ... 이런 식이기 때문에 65를 빼서 A가 배열의 0번째 칸을 사용하도록 한다
단순하게 풀었을 땐, 최대 개수 알파벳이 여러개인 경우를 확인하기 위해 maxCount를 사용했고,
실제 최대 개수 알파벳의 인덱스를 maxIndex에 저장한다
좀 더 코틀린스러운 버전에선 maxCount는 각 알파벳의 개수 배열에서 최대 값
maxIndex는 count 배열에서 가장 많이 사용된 알파벳의 인덱스 리스트를 의미
가장 많이 사용된 알파벳이 여러개면 maxIndex의 size는 1이 넘게 된다.
간단한데 코틀린 문법을 이용해서 간결하게 구현할 수 있다.
'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#9655 돌 게임 (0) | 2024.07.25 |
---|---|
#11723 집합 (0) | 2024.07.25 |
#2292 벌집 (0) | 2024.07.22 |
#5073 삼각형과 세 변 (1) | 2024.07.22 |
#23971 ZOAC 4 (0) | 2024.07.22 |
댓글