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