본문 바로가기
스터디(beakjoon)

Kotlin] 백준 5622번 문제풀이

by 김마리님 2023. 6. 1.

https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

 

풀이

더보기

이 문제는 다이얼을 잘 봐야 한다.

 

 

잘 보면 7과 9에는 문자가 4개가 있으므로 단순히 n/3을 해서는 풀 수 없는 문제이다.

 

나 같은 경우는 배열같은거 만들기 싫어서 아스키코드로 계산해냈는데,

대문자의 아스키코드 같은 경우, 65~90번대의 숫자를 가지므로, 아스키코드에서 -65를 하면 A는 0, B는 1, C는 2 .. 이렇게 3으로 나누기에 깔끔한 숫자를 가진다.

여기서 또 7번의 S같은 경우 한 칸을 앞당겨서 계산해야하기 때문에, S의 아스키코드 수부터 그 이후의 숫자는 code - 65 - 1을 통해 한 자리를 앞당겨줘야한다. z도 마찬가지로 한 칸 당겨졌기 때문에 Z는 2칸을 당겨줘야한다.

이제 여기에 몫이 0부터 시작하고(+1), 영어가 2부터 시작하므로(+1) 위에서 구한 몫에서 +2를 해주면 현재 다이얼의 숫자가 나온다. 

이제 한 칸 멀어질수록 1초씩 더 걸린다고 했으니 다이얼의 총 합을 더해주면 되는데, 이 때 1을 누를때 2초가 걸린다고 했으므로, 각 숫자에 +1을 더해야한다. (다이얼 2는 3초, 3은 4초 이렇게 걸릴것이기 때문에..)

 

이를 식으로 풀이하면..

fun main(args: Array<String>) {
    question5622()
}

fun question5622() {
    var word = readLine()!!.toCharArray()
    var time = 0

    word.forEach {
        var code = it.code - 65
        if(code < 18) {
            time += (code) / 3 + 2 + 1
        } else if(code < 25) {
            time += (code - 1) / 3 + 2 + 1
        } else {
            time += (code - 2) / 3 + 2 + 1
        }
    }

    println(time)

}

 

반응형