계발자 블로그

[알고리즘] Kotlin 백준 1157번 단어 공부 본문

Algorithm

[알고리즘] Kotlin 백준 1157번 단어 공부

더구더구 2023. 8. 14. 15:44

심화 1

백준 1157번 단어 공부

난이도 : 브론즈 1

사용언어 : 코틀린

 

 

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {

    val word = readLine().uppercase()

    val alphabetCount = IntArray(26) // 알파벳 카운트를 저장하는 배열 초기화

    for (char in word) {
        if (char in 'A'..'Z') {
            alphabetCount[char - 'A']++
        }
    }

    val maxCount = alphabetCount.maxOrNull()!! // 가장 많이 사용된 알파벳의 빈도수

    if (alphabetCount.count { it == maxCount } > 1) {
        println("?") // 가장 많이 사용된 알파벳이 여러 개인 경우
    } else {
        val maxIndex = alphabetCount.indexOf(maxCount)
        println(('A' + maxIndex)) // 가장 많이 사용된 알파벳 출력
    }
}

 

풀이 :

알파벳의 아스키 코드를 이용한 풀이입니다.

 

word에 입력 값을 받고 uppercase()로 모두 대문자로 만들어줍니다.

 

alphabetCount에 사이즈 26인 int형 배열을 만듭니다.

A-Z까지 26개라 사이즈가 26입니다.

 

word 값을 for문을 돌립니다

if문으로 char에 A부터 Z가 있는지 검사합니다

있다면 char에서 A의 값을 빼줍니다.

예를 들어 char가 B이면 B의 아스키 코드는 66입니다 (A가 65이고 하나씩 증가함)

그럼 66에서 65를 빼게 되면 1이고 alphabetCount 인덱스 1에는 ++가 되서 alphabetCount[1] = 1이 됩니다.

 

char에서 65를 빼게 되면 결국 해당 알파벳의 자리에 1이 증가 하게 되는 식으로 중복 되는 문자를 증가 시키는겁니다.

 

maxCount에는 alphabetCount의 max값을 넣어줍니다.

 

다시 조건문으로 가장 많이 사용된 알파벳이 여려개인지 검사하여 ?를 출력하고

A + maxIndex로 가장 많이 사용된 알파벳의 아스키 코드를 만들어서 출력하게 되면 정답이 나옵니다.