프로그래머스 삼각 달팽이 (JS)

c_yj·2023년 7월 9일
0

문제 설명

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

제한사항

  • n은 1 이상 1,000 이하입니다.

입출력 예

내풀이

function solution(n) {
  
  // n = 4라면 [[0],[0,0],[0,0,0],[0,0,0,0]] 이런식으로 배열을 만들어준다.
  const array = Array.from(Array(n), (_,i) => Array(i+1).fill(0));
  let x = 0;
  let y = 0;
  let direction = 0 // 방향잡는 변수 위에서 아래, 왼쪽에서 오른쪽, 오른쪽아래어세 위
  const maxNum = n * (n + 1) / 2;  // 1부터 maxNum까지 값이 들어간다
  let num = 1;

  while (num <= maxNum) {

    array[x][y] = num;

    // dircetion 이 0일땐 방향을 아래로
    if(direction === 0){
      // 끝에 도달하거나 0이 아니면 방향을 1로 바꿔준다
      if(x+1 === n || array[x+1][y] !== 0){
        direction = 1;
        y++
      }else{
        x++
      }
    // 1일땐 가로에서 세로로
    } else if(direction === 1){
      // 끝에 도달하면 마찬가지로 방향을 2로 바꾼다.
      if(y+1 === n || array[x][y+1] !== 0){
        direction = 2;
        x--
        y--
      }else{
        y++
      }
    // 끝에 도달하면 방향을 9으로
    }else if(direction === 2){
      if(array[x-1][y-1] !== 0){
        direction = 0
        x++
      }else{
        x--
        y--
      }
    }

    num++
  }

  // flat사용해서 배열을 이어붙인다
  return array.flat();
}
profile
FrontEnd Developer

0개의 댓글