티스토리 뷰
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
핵심 아이디어
1. 분할정복으로 영역을 나누며 구해야 하는 행과 열에 근접해 간다.
2.재귀로 영역을 구하고 이때 구해야 하는 행과 열이 아닌경우 바로 정사각형 넓이만큼 카운터를 추가
구현 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
// N : 제곱정수, r : 행 c : 열
const [N, r ,c] = input[0].split(" ").map(Number);
let res = 0;
const divide = (row, col, size) => {
if (row === r && col === c) {
// 해당 좌표
console.log(res);
return;
}
if (r >= row && r < row + size && c >= col && c < col + size) {
size = parseInt(size / 2);
divide(row, col, size); // 1사분면 탐색
divide(row, col + size, size); // 2사분면 탐색
divide(row + size, col, size); // 3사분면 탐색
divide(row + size, col + size, size); // 4사분면 탐색
} else res += size * size; // 영역 이외
};
divide(0, 0, Math.pow(2, N));
1. 재귀를 위한 divide 함수를 만든
2. 영역에 해당(r과 c 영역안)된다면 재귀로 탐색
3. divde 재귀 순서는 Z모양 순으로 구현
4. 영역 밖에 있다면 해당 영역의 크기만큼 res에 더한다
'Algorithm > 백준' 카테고리의 다른 글
[백준] 17219 - 비밀번호 찾기 (Javascript / node) (0) | 2023.11.06 |
---|---|
[백준] 11403 - 경로 찾기 (Javascript / node) (0) | 2023.11.05 |
[백준] 4963 섬의 개수 Javascript (0) | 2023.10.16 |
[백준] 11724 연결 요소의 개수 Javascript (0) | 2023.10.15 |
[백준] 10026 적록색약 Javascript (0) | 2023.10.13 |
공지사항
최근에 올라온 글