BOJ 1074 - Z

jjiani·2021년 4월 1일
0

Baekjoon

목록 보기
13/16


문제 링크

  • 함수 → 2^n * 2^n 배열에서 (r, c)를 방문하는 순서를 반환하는 함수

  • base condition → n == 0: return 0

  • 재귀 식

(r, c)가 몇 사분면에 있는지가 중요!

1사분면인 경우 return func(n-1, r, c)

2사분면인 경우 return 2^(n-1) * 2^(n-1) + func(n-, r, c - 2^(n-1))

3사분면인 경우 return 2(2^(n-1) 2^(n-1)) + func(n-, r - 2^(n-1), c)

4사분면인 경우 return 3(2^(n-1) 2^(n-1)) + func(n-, r - 2^(n-1), c - 2^(n-1))

import sys
def zigzag(n, r, c):
    if n == 0:
        return 0
    half = 1 << (n-1)

    if r < half and c < half:
        return zigzag(n-1, r, c)
    if r < half and c >= half:
        return half*half + zigzag(n-1, r, c - half)
    if r >= half and c < half:
        return 2*half*half + zigzag(n-1, r - half, c)
    return 3*half*half + zigzag(n-1, r - half, c - half)

n, r, c = map(int, sys.stdin.readline().split(' '))
print(zigzag(n, r, c))
profile
¡Bienvenido a mi velog!🐣

0개의 댓글