Z 재귀함수
#분할 정복 #재귀
백준 1074번 : Z
1. 시간초과 풀이
result = 0
N, X, Y = map(int, input().split(' '))
def solve(n, x, y):
global result
if n == 2:
if x == X and y == Y:
print(result)
return
result += 1
if x == X and y + 1 == Y:
print(result)
return
result += 1
if x + 1 == X and y == Y:
print(result)
return
result += 1
if x + 1 == X and y + 1 == Y:
print(result)
return
result += 1
return
# 아래 함수는 끝까지 셌을 경우 4개의 재귀함수를 모두 실행해야 하지만
# 초반 숫자만 필요할 경우 굳이 모든 재귀함수를 다 실행할 필요가 없다.
# 따라서 조건문을 걸어서 필요한 재귀함수까지만 실행하게 해야 한다.
solve(n / 2, x, y)
solve(n / 2, x, y + n / 2)
solve(n / 2, x + n / 2, y)
solve(n / 2, x + n / 2, y + n / 2)
solve(2 ** N, 0, 0)2. 정답 풀이
Last updated