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

lee-goeun·2022년 5월 18일
0
post-thumbnail

문제링크
https://programmers.co.kr/learn/courses/30/lessons/68645

문제 설명

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

제한사항

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

입출력 예

문제풀이

  1. n개의 배열을 만들어서 n개의 개수만큼 0을 넣어준다.
  2. 아래로 내려가면서 증가하는 반복문과
  3. 옆으로 증가하는 반복문,
  4. 위로 올라가면서 감소하는 반복문을 돌리면서 count를 하나씩 올려간다.
  5. 시작값과 끝값보다 작을 때까지 반복한다.

코드

function solution(n) {
    var answer = Array(n).fill(0).map((v,i) => Array(i+1).fill(0));
    let count = 0;
    let start = 0;
    let len = 0;
    let end = n;
    const fin = (1 + n)*n/2 ;
    while(start <= end){
        for(let i=start; i<end; i++){if(count==fin) break;answer[i][len] = ++count; }
        for(let i=len+1; i<end-len; i++){if(count==fin) break;answer[end-1][i] = ++count;}
        for(let i=end-2; i>0; i--){if(count==fin) break;answer[i][i-len] = ++count;}
        start+=2;
        len++;
        end-=1;  
    }
    
    return answer.flat();
}

코드 실행하였을 때는 통과했는데 제출하니 실패했다...

다른사람 코드

function solution(n) {
    var answer = new Array(n).fill().map((_,i) => new Array(i+1));

    let count = 0;
    let x = -1;
    let y = 0;
    while(n>0){
        for(let i=0; i<n; i++) answer[++x][y] = ++count;
        for(let i=0; i<n-1; i++) answer[x][++y] = ++count;
        for(let i=0; i<n-2; i++) answer[--x][--y] = ++count;
        n -= 3;
    }
    return answer.flatMap(e => e);
}

TIL

  • 규칙을 좀 더 잘 찾자ㅠㅠㅠ

0개의 댓글