알고리즘
백준 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이 될때까지 줄여나간다.