몰?.루();

백준 1074 코틀린 본문

프로그래밍/안드로이드, 코틀린

백준 1074 코틀린

toonraon 2022. 10. 6. 08:38
import kotlin.math.pow

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

    println(find(2.0.pow(n).toInt(), r, c))
}

fun find(l: Int, r: Int, c: Int): Int { // l은 한 변의 길이
    if (r == 0 && c == 0) {
        return 0
    } else if (r == 0 && c == 1) {
        return 1
    } else if (r == 1 && c == 0) {
        return 2
    } else if (r == 1 && c == 1) {
        return 3
    }


    if (r < l / 2 && c < l / 2) { // 왼쪽 위 사분면
        return find(l / 2, r, c)
    } else if (r < l / 2 && c >= l / 2) { // 오른쪽 위 사분면
        return ((l / 2) * (l / 2) * 1) + find(l / 2, r, c - (l / 2))
    } else if (r >= l / 2 && c < l / 2) { // 왼쪽 아래 사분면
        return ((l / 2) * (l / 2) * 2) + find(l / 2, r - (l / 2), c)
    } else { // 오른쪽 아래 사분면
        return ((l / 2) * (l / 2) * 3) + find(l / 2, r - (l / 2), c - (l / 2))
    }
}

재귀함수로 분할 정복해야 한다는 아이디어는 떠올렸지만 거기서 막혀서 한참을 헤맸다.

Comments