티스토리 뷰

728x90

문제 링크

programmers.co.kr/learn/courses/30/lessons/68645

코딩테스트 연습 - 삼각 달팽이

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]

programmers.co.kr

 

풀이

문제의 요구대로 시뮬레이션해줍시다.

아래 방향, 오른쪽 방향, 윗 방향의 순서대로 값을 채웁니다.

이때 $n, n-1, n-2, ..., 1$개씩 채워주면 됩니다.

 

각 동작을 함수로 구현하고 적절한 시작점과 길이를 넘겨줍시다.

 

정답 코드

let ans, num = 1;

const down = (x, y, l) => {
    if(l == 0) return;
    for(let k = 0; k < l; k++){
        ans[x++][y] = num++;
    }
    right(x-1, y+1, l-1);
}
const right = (x, y, l) => {
    if(l == 0) return;
    for(let k = 0; k < l; k++){
        ans[x][y++] = num++;
    }
    up(x-1, y-2, l-1);
}
const up = (x, y, l) => {
    if(l == 0) return;
	for(let k = 0; k < l; k++){
        ans[x--][y--] = num++;
    }
    down(x+2, y+1, l-1);
}
function solution(n) {
    ans = Array(n).fill().map((v, i) => Array(i+1).fill(0));
  	down(0, 0, n);
    return ans.flat();
}

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함