[프로그래머스] 코딩테스트 연습 - 49

krkorklo·2022년 2월 11일
0

프로그래머스

목록 보기
49/78

level 2 - 삼각 달팽이

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

입출력 예시
n : 4
-> [1,2,9,3,10,8,4,5,6,7]

function solution(n) {
    var arr = Array.from(Array(n), () => Array(n).fill(-1));
    var left = 0;
    var right = n - 1;
    var top = 0;
    var bottom = n - 1;
    var num = 1;
    while(left<=right && top<=bottom){
        for(var i=top; i<=bottom; i++) {
            arr[i][left] = num++;
        }
        left++;
        top++
        for(var i=left; i<=right; i++) {
            arr[bottom][i] = num++;
        }
        bottom--;
        var idx = 1;
        for(var i=bottom; i>=top; i--) {
            arr[i][right - idx++] = num++;
        }
        right-=2;
        top++;
    }
    return arr.flat().filter((a) => a != -1);
}

굉장히 직관적으로,,ㅎ 풀었닿

function solution(n) {
    var arr = Array.from(Array(n), () => Array(n).fill(-1));
    var row = -1;
    var col = 0;
    var num = 1;
    for (var i=n; i>0; i-=3) {
        arr[++row][col] = num++;
        for(var j=0; j<i-1; j++) arr[++row][col] = num++;
        for(var j=0; j<i-1; j++) arr[row][++col] = num++;
        for(var j=0; j<i-2; j++) arr[--row][--col] = num++;
    }
    return arr.flat().filter((a) => a != -1);
}

요렇게 풀면 더 간단

0개의 댓글