백준1074 - Z

전략

  1. 찾는 좌표가 현재 사각형에 존재하면 현재 사각형의 1/4 크기만큼 탐색을 진행한다.

  2. 원하는 좌표가 나오면 해당 부분에서 탐색을 중지하고 찾았다는 변수를 True로 바꾼다.

  3. 찾는 좌표가 현재 사각형에 존재하지 않으면 현재 정사각형 면적을 더한다.

코드

from sys import stdin, stdout

N, r, c = list(map(int, stdin.readline().split(' ')))

findFlag = False
cnt = 0

def divideAndConquer(N, x, y):
  global findFlag
  global cnt
  
  if findFlag:
    return
  if x == r and y == c:
    findFlag = True
    
  if x <= r < x + N and y <= c < y + N:
    divideAndConquer(N // 2, x, y)
    divideAndConquer(N // 2, x, y + N // 2)
    divideAndConquer(N // 2, x + N // 2, y)
    divideAndConquer(N // 2, x + N // 2, y + N // 2)
  else:
    cnt += N * N

divideAndConquer(2 ** N, 0, 0)
stdout.write(str(cnt) + '\\n')

Last updated