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

woolee의 기록보관소·2022년 11월 27일
0

알고리즘 문제풀이

목록 보기
110/178

문제 출처

프로그래머스 lev2 - 삼각 달팽이

나의 풀이 (통과)

target number를 설정하고, 여기에 도달할 때까지 while 문을 순회한다.

삼각형이므로

  • 수직으로 내려갔다가 (++y)
  • 수평으로 갔다가 (++x)
  • 계단식으로 거슬러 올라올 수 있게 (--y, --x)
function solution(n) {
  let answer = [];
  let arr = [];
  let tn = 0;
  for(let i=1; i<=n; i++) {
    tn += i;
    arr.push(Array.from({length:i}, () => 0));
  }

  let x=0, y=-1, val=0;
  while(val !== tn) {
    for (let i=0; i<n; i++) {
      // y++;
      // val++;
      arr[++y][x] = ++val;
    }
    for (let i=0; i<n-1; i++) {
      // x++;
      // val++;
      arr[y][++x] = ++val;
    }
    for (let i=0; i<n-2; i++) {
      // x--;
      // y--;
      // val++;
      arr[--y][--x] = ++val;
    }
    n -= 3;
  }
  
  arr.forEach((_, i) => answer = [...answer, ...arr[i]]);
  return answer;
}

console.log(solution(4));

다른 풀이

또는 for문을 돌면서 answer = [...answer, ...a[i]]를 해도 좋다.

function solution(n) {
  let a = Array(n).fill().map((_, i) => Array(i + 1).fill())
  let row = -1
  let col = 0
  let fill = 0
  for (let i = n; i > 0; i -= 3) {
    a[++row][col] = ++fill
    for (let j = 0; j < i - 1; j++) a[++row][col] = ++fill
    for (let j = 0; j < i - 1; j++) a[row][++col] = ++fill
    for (let j = 0; j < i - 2; j++) a[--row][--col] = ++fill
  }
  return a.flat()
}
profile
https://medium.com/@wooleejaan

0개의 댓글