https://www.acmicpc.net/problem/5622
풀이
더보기
이 문제는 다이얼을 잘 봐야 한다.
잘 보면 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)
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 3003번 문제풀이 (0) | 2023.06.02 |
---|---|
Kotlin] 백준 11718번 문제풀이 (0) | 2023.06.01 |
Kotlin] 백준 2908번 문제풀이 (0) | 2023.05.31 |
Kotlin] 백준 1152번 문제풀이 (0) | 2023.05.31 |
Kotlin] 백준 10809번 문제풀이 (0) | 2023.05.30 |