본문 바로가기
Algorithm/📖Baekjoon

#1157 단어 공부

by yewoneeee 2024. 7. 23.

문제


 

코드


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

댓글