반응형
https://www.acmicpc.net/problem/1074
Algorithm classification : Divide and conquer, Recursion
04.06.1. Problem
한수는 크기가 2^N × 2^N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.
N > 1인 경우, 배열을 크기가 2^(N-1) × 2^(N-1)로 4등분 한 후에 재귀적으로 순서대로 방문한다.
다음 예는 2^2 × 2^2 크기의 배열을 방문한 순서이다.
N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.
다음은 N=3일 때의 예이다.
04.06.2. Input limit
첫째 줄에 정수 N, r, c가 주어진다.
04.06.3. Output
r행 c열을 몇 번째로 방문했는지 출력한다.
04.06.4. Solution
앞서 소개한 쿼드 트리 문제와 동일합니다. 차이점은 하나의 문제만 계속 파고들면 된다는 것이죠. 따라서 정복단계가 단순합니다.
void cal(int c_x, int c_y, int size){
if(c_x == c+1 && c_y == r+1){
printf("%d\n", result);
return;
}
if(c_x <= c+1 && c+1 < c_x + size && c_y <= r+1 && r+1 < c_y + size){
cal(c_x, c_y, size/2);
cal(c_x+size/2, c_y, size/2);
cal(c_x, c_y+size/2, size/2);
cal(c_x+size/2, c_y+size/2, size/2);
}
else{
result += size*size;
}
}
cal(1, 1, pow(2, n));
반응형
'학부공부 > Algorithm PS_알고리즘' 카테고리의 다른 글
04.08. 석판 나르기[Divide and conquer][백준 2339] (0) | 2021.11.22 |
---|---|
04.07. 별 찍기 - 10[Divide and conquer][백준 2447] (0) | 2021.11.22 |
04.05. 쿼드트리[Divide and conquer][백준 1992] (0) | 2021.11.21 |
04.04. 종이의 개수[Divide and conquer][백준 1780] (0) | 2021.11.21 |
04.03. 히스토그램[Divide and conquer][백준 1725] (0) | 2021.11.21 |
댓글