티스토리 뷰
728x90
문제 링크
programmers.co.kr/learn/courses/30/lessons/68645
풀이
문제의 요구대로 시뮬레이션해줍시다.
아래 방향, 오른쪽 방향, 윗 방향의 순서대로 값을 채웁니다.
이때 $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
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 행렬 테두리 회전하기 (2021 Dev-Matching) (0) | 2021.05.02 |
---|---|
[프로그래머스] 다단계 칫솔 판매 (2021 Dev-Matching) (0) | 2021.05.02 |
[프로그래머스] 쿼드압축 후 개수 세기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 이진 변환 반복하기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 3진법 뒤집기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
댓글