Coding Problem

[프로그래머스] 삼각 달팽이

Yepchani 2025. 1. 3. 14:00
반응형

문제

삼각 달팽이

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;
}