반응형
문제
삼각 달팽이
https://school.programmers.co.kr/learn/courses/30/lessons/68645
풀이
설명
규칙대로 배열을 채운 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 구하는 문제입니다.
높이가 n인 삼각형 배열의 마지막 원소는 (n * (n + 1) / 2) 입니다.
첫 인덱스부터 시작해 아래, 오른쪽, 위 순서대로 방향을 진행하며 삼각형 배열을 채우면 됩니다.
삼각형 배열은 1차원 배열로 표현할 수 있습니다.
이 때, 각 행의 첫 번째 인덱스는 (x * (x + 1) / 2)입니다. 여기에 y를 더하면 x행의 y열입니다.
즉, (x, y) 원소의 위치는 (x * (x + 1)) / 2 + y 입니다.
예시 코드
function solution(n) {
const answer = Array((n * (n + 1)) / 2).fill(0);
let dir = 0;
let num = 1;
let x = -1,
y = 0;
for (let i = n; i > 0; i--) {
for (let j = 0; j < i; j++) {
// Down
if (dir === 0) x++;
// Right
else if (dir === 1) y++;
// Up
else {
x--;
y--;
}
answer[(x * (x + 1)) / 2 + y] = num++;
}
dir = (dir + 1) % 3;
}
return answer;
}
'Coding Problem' 카테고리의 다른 글
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2025.01.05 |
---|---|
[프로그래머스] 호텔 대실 (0) | 2025.01.04 |
[프로그래머스] 마법의 엘리베이터 (0) | 2025.01.02 |
[프로그래머스] 가장 긴 팰린드롬 (1) | 2025.01.01 |
[프로그래머스] 2개 이하로 다른 비트 (0) | 2024.12.31 |