article thumbnail image
Published 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분면 으로 쪼개서 확인하는 재귀문제

'백준' 카테고리의 다른 글

백준 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
복사했습니다!