본문 바로가기

알고리즘/분할정복

파이썬 | 백준 | 1074 | Z

solution1 : 2차원 배열

1. 2차원 배열을 -1로 초기화해둔 후 재귀함수를 호출하며 1씩 증가되는 수를 저장

2. lst[r][c] 출력

# 1074, Z
import sys
input = sys.stdin.readline


def z(x, y, k):
    global num
    if k == 2:
        if lst[x][y] == -1:
            for i in range(2):
                for j in range(2):
                    lst[x+i][y+j] = num
                    num += 1
    else:
        z(x, y, k // 2)
        z(x, y + k // 2, k // 2)
        z(x + k // 2, y, k // 2)
        z(x + k // 2, y + k // 2, k // 2)

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

l = 2**N
lst = [[-1]*l for _ in range(l)]
num = 0
z(0, 0, l)
print(lst[r][c])

메모리 초과

solution2 : 배열 X

# 1074, Z
import sys
input = sys.stdin.readline


def z(x, y, k):
    global num
    if k == 2:
        for i in range(2):
            for j in range(2):
                if x+i == r and y+j == c:
                    print(num)
                    return
                num += 1

    else:
        z(x, y, k // 2)
        z(x, y + k // 2, k // 2)
        z(x + k // 2, y, k // 2)
        z(x + k // 2, y + k // 2, k // 2)

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

l = 2**N
num = 0
z(0, 0, l)

시간 초과

 

문제 출처 https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원 ��

www.acmicpc.net

 

'알고리즘 > 분할정복' 카테고리의 다른 글

파이썬 | 백준 | 1992 | 쿼드트리  (0) 2020.09.01