📝 코테/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)
분할정복 응용해서 푸는 문제인데 조금 어려웠다.
반응형