[prgrms] 삼각달팽이

Mayton·2022년 12월 26일
0

Coding-Test

목록 보기
33/37
post-thumbnail

문제

lv2, 문제 페이지

문제 설명

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

입출력 예

n	result
4	[1,2,9,3,10,8,4,5,6,7]
5	[1,2,12,3,13,11,4,14,15,10,5,6,7,8,9]
6	[1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

입출력 예 설명
입출력 예 #1

문제 예시와 같습니다.

제한사항

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

나의 첫 생각

n이 1000이하 이기 때문에 제한 없이 규칙에 맞추어 구현하면 되겠다고 생각을 하였다.
왼쪽 대각선으로 n만큼, 그리고 오른쪽으로 n-1만큼, 왼쪽위로 n-2만큼 올라가는 것이 반복되고
다음 turn 에는 n-3부터 시작을 하게 된다. n이 0이되면 종료하게 된다.

풀이

function solution(n) {
  const result = Array.from({ length: n }, (_, idx) => new Array(idx + 1));
  let [y, x] = [-1, 0];
  let cnt = 0;

  while (n > 0) {
    for (let i = 0; i < n; i += 1) result[++y][x] = ++cnt;
    for (let i = 0; i < n - 1; i += 1) result[y][++x] = ++cnt;
    for (let i = 0; i < n - 2; i += 1) result[--y][--x] = ++cnt;
    n -= 3;
  }
  return result.flatMap((el) => el);
}
profile
개발 취준생

0개의 댓글