반응형
Notice
Recent Posts
Recent Comments
Link
동캄의 코딩도장
백준 1074 [Z] 파이썬 본문
반응형
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
# 백준 1074 Z
N,r,c,=map(int,input().split())
answer=0
def search(r,c,N,tr,tc): # 왼쪽부터 현재 행, 현재 열, 승수, 목표 행, 목표 열
global answer
if r==tr and c==tc: #현재 행,열이 목표 행,열이면 함수종료
return
half_distance=2**(N-1) #정사각형의 한 변의 절반 길이
quarter_area=half_distance*half_distance #정사각형 넓이의 4분의 1
criteria_r,criteria_c=r+half_distance,c+half_distance #4등분했을 때, 구간을 나누는 기준
if tr<criteria_r:
if tc<criteria_c: #왼쪽 위 구간에 있다면
search(r,c,N-1,tr,tc)
else: #오른쪽 위 구간에 있다면
answer+=quarter_area
search(r,c+half_distance,N-1,tr,tc)
else:
if tc<criteria_c: #왼쪽 아래 구간에 있다면
answer+=quarter_area*2
search(r+half_distance,c,N-1,tr,tc)
else:
answer+=quarter_area*3 #오른쪽 아래 구간에 있다면
search(r+half_distance,c+half_distance,N-1,tr,tc)
search(0,0,N,r,c) #탐색 시작
print(answer)
분할 정복을 이용해서 해결하는 문제다.
z를 따라 방문한다는 것은 왼쪽위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 순으로 방문한다는 것을 의미한다.
따라서 4분할 한 뒤, 목표하는 점의 행, 열의 위치가 4분할 영역 중 어느 영역에 속하는지 파악한다.
그리고 다시 그 영역을 4분할하는 것을 재귀적으로 반복하여 목표점을 찾아낸다.
반응형
'코테 > BOJ' 카테고리의 다른 글
백준 1052 [물병] 파이썬 (0) | 2024.01.16 |
---|---|
백준 11286 [절댓값 힙] 파이썬 (0) | 2023.03.21 |
백준 11403 [경로 찾기] 파이썬 (0) | 2023.03.21 |
백준 5525 [IOIOI] 파이썬 (0) | 2023.03.21 |
백준 1992 [쿼드트리] 파이썬 (0) | 2023.03.21 |