문제
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
📝 풀이
function solution(n) {
let answer = Array.from({length: n}, (v,idx) => new Array(idx+1).fill(0));
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(v => v);
}
아래 블로그를 참고한 코드인데 굉장히 효율적이고 깔끔하다.
기본 x와 y를 놓고 삼각형 모양을 세 군데로 나눠 순회한다.
- 체크 포인트
Array.from(new Array(n), ~)
을Array.from({length: n},~)
로 쓸 수도 있다.
정확도 테스트 결과
참고
'Coding test' 카테고리의 다른 글
[프로그래머스] 줄서는 방법 (Lv 2) - javascript (0) | 2022.06.10 |
---|---|
[프로그래머스] 멀리 뛰기 (Lv 2) - javascript (0) | 2022.06.10 |
[프로그래머스] 교점에 별 만들기 (Lv 2) - javascript (0) | 2022.06.09 |
[프로그래머스] 피로도 (Lv 2) - javascript (0) | 2022.06.08 |
[프로그래머스] 전력망을 둘로 나누기 (Lv 2) - javascript (0) | 2022.06.07 |