[백준] Z (1074)(kotlin)

문제 설명

백준 1074번 문제 링크

입력 및 출력

» 입력

첫째 줄에 정수 N, r, c가 주어진다.

» 출력

r행 c열을 몇 번째로 방문했는지 출력한다.

제한 사항

1 ≤ N ≤ 15 0 ≤ r, c < 2N

예제 입출력(테스트케이스)

입력 출력
2 3 1 11
3 7 7 63
5 2 3 13
5 5 5 147
6 5 5 275
7 5 3 519
2 3 1 11
3 7 7 63
15 32767 32767 1073741823

문제 풀이1

풀이 참고

import kotlin.math.pow

fun main() = with(System.`in`.bufferedReader()) {
    val (N, r, c) = readLine().split(" ").map { it.toInt() }
    var n = 2.0.pow(N).toInt()
    var count = 0
    var x = 0
    var y = 0

    while (n > 0) {
        n /= 2

        if (r < x + n && c < y + n) {
            count += n * n * 0
        } else if (r < x + n) {
            count += n * n * 1
            y += n
        } else if (c < y + n) {
            count += n * n * 2
            x += n
        } else {
            count += n * n * 3
            x += n
            y += n
        }

        if (n == 1) {
            println(count)
            break
        }
    }
}