반응형
문제
달팽이
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(" ");
}
'Coding Problem' 카테고리의 다른 글
[BOJ 2785] 체인 (0) | 2025.03.24 |
---|---|
[BOJ 2653] 수 이어가기 (0) | 2025.03.23 |
[BOJ 2622] 삼각형만들기 (0) | 2025.03.21 |
[BOJ 2659] 십자카드 문제 (0) | 2025.03.20 |
[BOJ 2578] 빙고 (0) | 2025.03.19 |