백준 파이썬 #1074: Z

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)

재귀로 해결했습니다.

전달되는 매개변수는 사각형의 길이, 대상 좌표, 사각형의 왼쪽 위 모서리 좌표 및 왼쪽 위 모서리 값입니다.

매개 변수를 줄일 수 있다고 생각하지만 확실하지 않습니다.