Coding Problem
[BOJ 1913] 달팽이
Yepchani
2025. 3. 22. 20:00
반응형
문제
달팽이
https://www.acmicpc.net/problem/1913
풀이
설명
1부터 N^2까지의 자연수를 달팽이 모양으로 채우고, 주어진 자연수의 위치를 찾는 문제입니다.
방향은 위, 오른쪽, 아래, 왼쪽 순입니다.
이동 횟수는 1 -> 1 -> 2 -> 2 -> 3 -> 3 과 같은 식으로 증가합니다.
방향 전환 후 이동 횟수만큼 이동하며 수를 채우면 됩니다.
예시 코드
function solution() {
const N = Number(input());
const target = Number(input());
const maxNum = N * N;
const matrix = Array.from({ length: N }, () => Array(N).fill(0));
let num = 1;
let x = Math.floor(N / 2);
let y = Math.floor(N / 2);
matrix[x][y] = num++;
let layer = 1;
while (num <= maxNum) {
// Move up
for (let i = 0; i < layer; i++) {
if (num > maxNum) break;
matrix[--x][y] = num++;
}
// Move right
for (let i = 0; i < layer; i++) {
if (num > maxNum) break;
matrix[x][++y] = num++;
}
layer++;
// Move down
for (let i = 0; i < layer; i++) {
if (num > maxNum) break;
matrix[++x][y] = num++;
}
// Move left
for (let i = 0; i < layer; i++) {
if (num > maxNum) break;
matrix[x][--y] = num++;
}
layer++;
}
matrix.forEach((row) => console.log(row.join(" ")));
let targetPos = [0, 0];
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
if (matrix[i][j] === target) {
targetPos = [i + 1, j + 1];
break;
}
}
}
return targetPos.join(" ");
}