STUDY/Algorithm

[백준] 1074 Z python

sinawi95 2021. 5. 4. 19:44
728x90

www.acmicpc.net/problem/1074

 

1074번: Z

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

www.acmicpc.net

N, r, c = map(int, input().split())
def z(N, r, c):
    result = 0
    while N > 0:
        if N == 1:
            result += r * 2 + c
            break
        else:
            flag = 4 ** (N - 1)
            half = (2 ** N) >> 1
            N -= 1
            if r < half and c < half:
                continue
            elif r < half:
                result += flag
                c -= half
            elif c < half:
                result += flag * 2
                r -= half
            else:
                result += flag * 3
                r -= half
                c -= half
    return result

print(z(N, r, c))