[백준 Python Swift] 1074번 Z
1074번 Z
풀이 방법
- N >= 2일 때(4 by 4 행렬부터), 행과 열을 절반(2**N / 2)씩 쪼개는데
- 2 by 2 행렬이 될 때까지 쪼갠다(2 by 2 행렬에서는 Z 모양으로 방문하면 된다)
- 2 by 2 행렬이 아닐 때는 좌상 -> 우상 -> 좌하 -> 우하 순으로 방문해야한다
- 단, 전부 방문하면서 찾으면 시간초과가 난다
- 따라서 쪼갤 때 범위를 나누어 절대 없을 부분은 넘어가고
- 있을 것 같은 부분에서만 찾으면 된다
풀이
Python
def solve(n, x, y):
global count
# 2 by 2 행렬부터는 Z 모양으로 방문
if n == 2:
if x == row and y == column:
print(count)
return
count += 1
if x == row and y+1 == column:
print(count)
return
count += 1
if x+1 == row and y == column:
print(count)
return
count += 1
if x+1 == row and y+1 == column:
print(count)
return
count += 1
return
else:
# 여기서부터 다 탐색하면 시간초과
# 있을 것 같은 부분에서만 탐색하면 된다
if row < x + n / 2 and column < y + n / 2:
solve(n / 2, x, y)
elif row < x + n / 2 and column < (y + n / 2) + n / 2:
count += int(((n / 2) ** 2))
solve(n / 2, x, y + n / 2)
elif row < (x + n / 2) + n / 2 and column < y + n / 2:
count += int((((n / 2) ** 2))*2)
solve(n / 2, x + n / 2, y)
elif row < (x + n / 2) + n / 2 and column < (y + n / 2) + n / 2:
count += int((((n / 2) ** 2))*3)
solve(n / 2, x + n / 2, y + n / 2)
N, row, column = map(int, input().split(" "))
count = 0
solve(2**N, 0, 0)
Swift
import Foundation
let inputNRC = readLine()!.split(separator: " ")
let N = Int(inputNRC[0])!
let row = Int(inputNRC[1])!
let column = Int(inputNRC[2])!
var count = 0
func solve(_ n: Int, _ x: Int, _ y: Int) -> Void {
if n == 2 {
if x == row, y == column {
print(count)
return
}
count += 1
if x == row, y+1 == column {
print(count)
return
}
count += 1
if x+1 == row, y == column {
print(count)
return
}
count += 1
if x+1 == row, y+1 == column {
print(count)
return
}
count += 1
return
} else {
if row < x + n / 2, column < y + n / 2 {
solve(n / 2, x, y)
} else if row < x + n / 2, column < (y + n / 2) + n / 2 {
count += (n / 2) * (n / 2)
solve(n / 2, x, y + n / 2)
} else if row < (x + n / 2) + n / 2, column < y + n / 2 {
count += (n / 2) * (n / 2) * 2
solve(n / 2, x + n / 2, y)
} else {
count += (n / 2) * (n / 2) * 3
solve(n / 2, x + n / 2, y + n / 2)
}
}
}
solve(Int(pow(2, Double(N))), 0, 0)
Author And Source
이 문제에 관하여([백준 Python Swift] 1074번 Z), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yc1303/백준-Python-Swift-1074번-Z저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)