https://www.acmicpc.net/problem/1074
Z자 모양의 프랙탈 구조를 이루는 행렬의 위치에 따른 값을 찾는 문제.
import sys
sys.stdin = open('C:/Users/USER/Desktop/vs/py/py1/input.txt', 'r')
def input():
return sys.stdin.readline().strip()
# ==============================================================================
A, Y, X = map(int, input().split())
N = 2**A
def Z(N, Y, X, y, x, val):
if N == 1:
print(val-1)
return
K = N//2
quadrant = 0
if (y <= Y < y+K):
quadrant += 2
if (x <= X < x+K):
quadrant += 1
if quadrant == 3:
Z(K, Y, X, y, x, val)
elif quadrant == 2:
Z(K, Y, X, y, x+K, val+K**2)
elif quadrant == 1:
Z(K, Y, X, y+K, x, val+2*(K**2))
else:
Z(K, Y, X, y+K, x+K, val+3*(K**2))
return
Z(N, Y, X, 0, 0, 1)
재귀로 해결했습니다.
전달되는 매개변수는 사각형의 길이, 대상 좌표, 사각형의 왼쪽 위 모서리 좌표 및 왼쪽 위 모서리 값입니다.
매개 변수를 줄일 수 있다고 생각하지만 확실하지 않습니다.