알고리즘

백준 1074 - Z (Python)

jamie2779 2023. 7. 29. 04:29

문제

https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

풀이

def f(n,r,c):
    if n == 1:
        return 2*r+c
    else:
        n-=1
        quad = 2*(r//(2**n))+(c//(2**n)) #사분면의 위치를 나타낸다, 0,1,2,3 중 하나
        return (4**n)*quad + f(n,r%(2**n),c%(2**n))

n, r, c = map(int,input().split())
print(f(n,r,c))

재귀를 이용하여 풀었다.

n,r,c 가 입력되었을 때 사분면의 위치를 판단하고, 이전 사분면의 방문 횟수를 더하고, (r,c)가 위치한 사분면을 또 4개로 나누었을 때의 위치를 확인하는 과정을 계속 반복하여 n이 1이 될때까지 줄여나간다.