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

DO YEON KIM·2023년 9월 15일
0

프로그래머스 Lv2

목록 보기
45/57


문제 링크


문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

제한사항
n은 1 이상 1,000 이하입니다.


삼각형을 배열로 만들어준 뒤 시작한다. 각 삼각형의 행마다 열의 개수는 n, n-1 ... 이다.

function solution(n) {
    const triangle = Array.from({ length: n }, () => []);
  
  // 삼각형을 표현하기 위해 2차원 배열을 초기화한다. 길이가 n이고, 각 요소가 빈 배열인 배열을 생성한다.
  
    let num = 1;	//숫자를 채우기 위한 변수
    let row = -1;	//아무 행도 거치지 않았다는 것을 나타내기 위해 -1로 생성
    let col = 0;

    for (let i = n; i > 0; i -= 3) {
        for (let j = 0; j < i; j++) {
            row++;
            triangle[row][col] = num++;
        }

        for (let j = 0; j < i - 1; j++) {
            col++;
            triangle[row][col] = num++;
        }

        for (let j = 0; j < i - 2; j++) {
            row--;
            col--;
            triangle[row][col] = num++;
        }
    }

    return triangle.flat();	//2차원 배열을 1차원 배열로 변환하여 반환
}

col을 0으로 초기화하지 않으면 오른쪽으로 이동하면서 첫 번째 열에서 시작하지 않게 된다. 그렇게 되면 삼각형의 가장자리에 위치하는 숫자를 먼저 채우지 않게 되는 일이 발생한다.

row =-1의 역할은 삼각형을 채우는 과정에서 현재 위치를 나타내는 변수이다. 삼각형을 채울 때, 맨 위 꼭지점부터 시작해서 아래로 내려감녀서 숫자를 채우게 되는데, 초기에는 아무 행도 거치지 않았다는 의미로 -1로 초기화한다.

i -= 3인 이유는 각 단계마다 삼각형을 채우는 방식이 달라지기 때문이다.
1. 삼각형을 아래로 채우고 (i개의 숫자 채우기)
2. 오른쪽으로 채우고 ( i-1개 채우기)
3. 대각선 위로 올라가는 과정 (i-2개 채우기)
마다 숫자의 개수가 다르기 때문이다.

profile
프론트엔드 개발자를 향해서

0개의 댓글