Post

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

골드 5

링크

1074번: Z

풀이

Z모양 격자의 각 사분면 또한, 동일한 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.