풀이 및 해설(주석)
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분면 으로 쪼개서 확인하는 재귀문제
'백준' 카테고리의 다른 글
백준 14716 현수막 (자바) (0) | 2023.01.16 |
---|---|
백준 1463 1로 만들기 (파이썬) (2) | 2023.01.16 |
백준 1920 수 찾기 (자바, 파이썬) (0) | 2022.12.21 |
백준 1926 그림 (파이썬, 자바) (0) | 2022.12.18 |
백준 1461 도서관 (파이썬) (0) | 2022.12.15 |