Z 모양의 탐색 패턴에서 주어진 값을 언제 방문하는지 구하자
난이도 : Silver1
1. 재귀를 이용해 Z 모양으로 탐색
import sys
from math import pow
N, r, c = tuple(map(int, sys.stdin.readline().split()))
def visit(row, col, length, num):
if row == 0 and col == 0: # row, col을 계속 update 하다, 0이 되면 종료 (0 => 잘려진 배열 시작점에 답이 존재)
return num
length = length // 2
if row > length - 1 and col > length - 1: # row, col이 모두 현재 배열 길이보다 클 때 (우측 하단)
num += (length*length*3) # 우측 하단 시작점 바로 전 값까지 모두 더하려면, 배열 크기에 3을 곱한 값이 들어가야 함
return visit(row - length, col - length, length, num)
elif row > length - 1 and col <= length - 1: # row는 배열 길이보다 크고, col은 배열 길이보다 작을 때 (좌측 하단)
num += (length*length*2)
return visit(row - length, col, length, num)
elif row <= length - 1 and col > length - 1: # row는 배열 길이보다 작고, col은 배열 길이보다 클 때 (우측 상단)
num += (length*length)
return visit(row, col - length, length, num)
elif row <= length - 1 and col <= length - 1: # row, col이 모두 배열 길이보다 작을 때 (좌측 상단)
return visit(row, col, length, num)
print(int(visit(r, c, pow(2, N), 0)))
재귀 문제를 많이 풀지 않아 상당히 고민을 많이 했다.