📝 코테/BOJ

[Swift] 백준 1074 Z

JerryiOS 2023. 4. 11. 06:50

import Foundation

let Nrc = readLine()!.components(separatedBy: " ").map { Int($0)! }
let N = Nrc[0]
let r = Nrc[1]
let c = Nrc[2]

var cnt = 0
// 한 변의 길이
let m = 2 << (N-1)

func check(_ x: Int, _ y: Int, _ n: Int) {
    if n == 2 {
        if x == r, y == c {
            print(cnt)
            return
        }
        cnt += 1
        if x == r, y+1 == c {
            print(cnt)
            return
        }
        cnt += 1
        if x+1 == r, y == c {
            print(cnt)
            return
        }
        cnt += 1
        if x+1 == r, y+1 == c {
            print(cnt)
            return
        }
        return
    } else {
        let w = n/2
        if r < x+w, c < y+w {
            check(x, y, w)
        } else if r < x+w, c < y+n {
            cnt += w*w
            check(x, y+w, w)
        } else if r < x+n, c < y+w {
            cnt += w*w*2
            check(x+w, y, w)
        } else {
            cnt += w*w*3
            check(x+w, y+w, w)
        }
    }
}

check(0, 0, m)

분할정복 응용해서 푸는 문제인데 조금 어려웠다.

반응형