본문 바로가기

BOJ 알고리즘 (패캠)/자료구조, 구현

1074번: Z (구현, 재귀) - Fastcampus

www.acmicpc.net/problem/1074

 

1074번: Z

한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원 ��

www.acmicpc.net

def recur(size, cnt=0, x=0, y=0):
    global res
    if size == 1:
        if x == R and y == C:
            res = cnt
        cnt += 1
        return cnt

    size //= 2
    for i, j in [(x, y), (x, y+size), (x+size, y), (x+size, y+size)]:
    
        # 가지치기 추가: 4분면 중 1개만 탐색한다
        if (i <= R < i+size) and (j <= C < j+size):
            cnt = recur(size, cnt, i, j)
        else:
            cnt += size * size

    return cnt


N, R, C = map(int, input().split())

res = 0
recur(2 ** N)
print(res)