백준

백준 1074 Z (파이썬)

MC류짱 2022. 12. 25. 22:21

풀이 및 해설(주석)

def solve(n, r, c):
    global rst
    if r == tr and c == tc:
        print(rst)
        exit()
    # 찾는 위치에서 벗어난 경우 n의 범위만큼 더해주고 return
    if not(r <= tr < r+n and c <= tc < c+n):
        rst += (n * n)
        return
    # n이 1인경우 Z자로 1씩 더해감
    if n == 1:
        rst += 1
        return
    half = n//2
    # 제 1사분면
    solve(half, r, c)
    # 2사분면
    solve(half, r, c + half)
    # 3사분면
    solve(half, r + half, c)
    # 4사분면
    solve(half, r + half, c + half)


if __name__ == '__main__':
    N, tr, tc = map(int, input().split())
    rst = 0
    solve(2**N, 0, 0)

 


후기

  • Z라는 것에 너무 정신이 팔려서 좀 오래걸렸다.
  • 굳이 Z가 아니고 n의 범위에 따라 값을 조절하여 더해주면 되는 문제였다.
  • 사각형을 계속해서 1, 2, 3, 4분면 으로 쪼개서 확인하는 재귀문제