백준 1074 Z

홍찬우·2023년 7월 31일
0

문제

Z

Z 모양의 탐색 패턴에서 주어진 값을 언제 방문하는지 구하자

난이도 : Silver1


풀이

1. 재귀를 이용해 Z 모양으로 탐색


코드

import sys
from math import pow

N, r, c = tuple(map(int, sys.stdin.readline().split()))

def visit(row, col, length, num):
    if row == 0 and col == 0:  # row, col을 계속 update 하다, 0이 되면 종료 (0 => 잘려진 배열 시작점에 답이 존재)
        return num
    
    length = length // 2
    if row > length - 1 and col > length - 1:  # row, col이 모두 현재 배열 길이보다 클 때 (우측 하단)
        num += (length*length*3)  # 우측 하단 시작점 바로 전 값까지 모두 더하려면, 배열 크기에 3을 곱한 값이 들어가야 함
        return visit(row - length, col - length, length, num)

    elif row > length - 1 and col <= length - 1:  # row는 배열 길이보다 크고, col은 배열 길이보다 작을 때 (좌측 하단)
        num += (length*length*2)
        return visit(row - length, col, length, num)
    
    elif row <= length - 1 and col > length - 1:  # row는 배열 길이보다 작고, col은 배열 길이보다 클 때 (우측 상단)
        num += (length*length)
        return visit(row, col - length, length, num)
        
    elif row <= length - 1 and col <= length - 1:  # row, col이 모두 배열 길이보다 작을 때 (좌측 상단)
        return visit(row, col, length, num)


print(int(visit(r, c, pow(2, N), 0)))

        

결과

재귀 문제를 많이 풀지 않아 상당히 고민을 많이 했다.

profile
AI-Kid

0개의 댓글