문제풀이/기타

[파이썬] [분할정복] 백준 1074 Z

승무_ 2023. 4. 3. 20:30

문제

https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

코드

n,r,c=map(int, input().split())

count=0

def recur(n,nx,ny):
    global count

    # 출력 조건에 포함되면 출력하고 종료
    if nx == r and ny==c:
        print(count)
        exit(0)
    # n이 1인데 출력조건에 포함되지 않으면
    if n==1:
        count+=1
        return

    # 해당 사분면에 포함 되지 않으면
    elif not (nx<=r<n+nx and ny<=c<n+ny):
        count+=(n**2)
        return

    temp = n // 2
    # 왼쪽 위
    recur(temp, nx, ny)
    # 오른쪽 위
    recur(temp, nx, ny + temp)
    # 왼쪽 아래
    recur(temp, nx + temp, ny)
    # 오른쪽 아래
    recur(temp, nx + temp, ny + temp)

recur(2**n,0,0)
print(count)