https://school.programmers.co.kr/learn/courses/30/lessons/68645
코드
function solution(n) {
const snail = Array.from(new Array(n), () => new Array(n).fill(0));
const dir = [
[1, 0],
[0, 1],
[-1, -1],
];
let x = -1;
let y = 0;
let num = 1;
for (let i = n; i > 0; i--) {
const d = (n - i) % 3;
for (let j = 0; j < i; j++) {
x += dir[d][0];
y += dir[d][1];
snail[x][y] = num;
num++;
}
}
return snail.flatMap((arr) => arr.filter((val) => val !== 0));
}
피라미드 모양에서 가장 아래 행을 제외한 각 행을 반 칸씩 왼쪽으로 밀어보면 아래와 같은 모양이 나온다.
이 모양을 보면 달팽이 모양으로 숫자를 채워나갈 때의 이동 방향은 총 3가지가 있는 것을 알 수 있다.
1. 아래로
2. 오른쪽으로
3. 왼쪽 위로
그리고 한 번 직선을 그리며 숫자를 채우고 나면, 방향을 틀어서 다음 직선을 그릴 때에는 채워야 하는 숫자가 1개씩 감소함을 알 수 있다.
이를 이용하여 코드를 작성하면 위와 같은 코드가 되는 것이다. 코드는 한 직선에서 채워야 하는 숫자의 개수가 1개가 될 때까지 자신의 방향으로 나아가며 증가하는 숫자를 채운다. 여기서 자신의 방향은 `const d = (n - i) % 3;`을 이용하여 구한다.
'문제풀이 > 구현' 카테고리의 다른 글
[Python/파이썬] 백준 11916번 볼질 (0) | 2025.06.03 |
---|---|
[Javascript/자바스크립트] (프로그래머스) 다단계 칫솔 판매 (1) | 2025.05.17 |
[Javascript/자바스크립트] (프로그래머스) 베스트앨범 (0) | 2025.05.08 |
[Python/파이썬] 백준 9555번 대회 장소 준비 (0) | 2025.04.22 |
[Python/파이썬] 백준 11387번 님 무기가 좀 나쁘시네여 (0) | 2025.04.15 |