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 |
---|