Post

[백준/코틀린] 1074번: Z

골드 5

링크

1074번: Z

풀이

(r, c)가 속한 사분면을 찾은 뒤, 이전까지 방문한 칸의 개수를 offset으로 더합니다.
이후 사분면 내부 좌표(r % p, c % p)로 재귀 호출하며 최종 방문 순서를 계산합니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
val n1 = listOf(listOf(0, 1), listOf(2, 3))

fun z(n: Int, r: Int, c: Int, b: Int) {
    val p = 1 shl (n - 1)

    if (n == 1) println(b + n1[r][c])
    else z(n - 1, r % p, c % p, b + p * p * n1[r / p][c / p])
}

fun main() {
    val (n, r, c) = readln().split(" ").map { it.toInt() }

    z(n, r, c, 0)
}

This post is licensed under CC BY 4.0 by the author.