코딩테스트 대비/BOJ

[Baekjoon/Python] 1074번: Z - 효과는 굉장했다!

bluetag_boy 2021. 12. 19. 03:40
반응형
 

1074번: Z

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

www.acmicpc.net

 

알고리즘 분류

  • 분할 정복
  • 재귀

 

 

SOLUTION

import sys

N, r, c = map(int, sys.stdin.readline().split()) # r = 행, c = 열
result = 0

while True:
    if N < 1: # 더 이상 쪼개지지 않으므로 종료
        break

    middle = (N-1) ** 2 # 2^N X 2^N 의 중앙

    if r >= middle: 
        if c >= middle: # 오른쪽 아래 구역
            result += ((N-1) ** 4) * 3
            r -= middle
            c -= middle

        else: # 왼쪽 아래 구역
            result += ((N-1) ** 4) * 2
            r -= middle

    else:
        if c >= middle: # 오른쪽 위 구역
            result += ((N-1) ** 4)
            c -= middle

        else: # 왼쪽 위 구역
            pass 

    N -= 1

if r == 0:
    if c == 0:
        print(result) # 왼쪽 위 구역

    else:
        print(result+1) # 오른쪽 위 구역

else:
    if c == 0:
        print(result+2) # 왼쪽 아래 구역

    else:
        print(result+3) # 오른쪽 아래 구역