백준
백준 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분면 으로 쪼개서 확인하는 재귀문제