본문 바로가기

백준 문제 풀이 및 피드백

2023.01.27 Z 백준[파이썬]

https://www.acmicpc.net/problem/1074

 

1074번: Z

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

www.acmicpc.net

 

import sys

input = sys.stdin.readline


def zzz(r,c,size,num = 0):
    if size == 1:
        return num

    size = size // 2 
    
    if r < size and c < size:
        pass
    elif r < size and c >= size:
        num += (size ** 2)
    elif r >= size and c < size:
        num += (size ** 2) * 2
    elif r >= size and c >= size:
        num += (size ** 2) * 3

    return zzz(r%size,c%size,size,num)

n,r,c = map(int,input().split())

print(zzz(r,c,2**n))

각 사분면의 크기 증가값은 같다는 거를 생각해서 큰 사분면 부터 시작해서 원하는 행 열까지 내려 가면서 구했다.

함수를 다시 호출 할 때 나머지를 사용한 이유는 위에서 말한 것 처럼 같은 크기의 사각형이면 증가하는 값은 같기 때문에 재귀를 사용 할 수 있었다. 

 

이번 문제에서는 pypy를 사용 했을때 시간이 더 걸리는 경우였다. 무조건 pypy3가 시간이 더 걸린다고 생각을 했는데 간단한 코드 에서는 파이썬이 더 빠르게 동작하는거 같았다. 이런 경우는 앞으로 돌려보면서 해봐야겠다.