이번 문제는 Array의 prototype에 고차 함수를 직접 구현하는 문제였다.
this가 호출한 배열을 가르킨다는 것을 이번 문제를 해결하면서 처음 알게되어 의미가 깊다.
/**
* @param {number} rowsCount
* @param {number} colsCount
* @return {Array<Array<number>>}
*/
Array.prototype.snail = function(rowsCount, colsCount) {
if(rowsCount * colsCount !== this.length) {
return [];
}
const result = [];
for(let i = 0; i < rowsCount; i++) {
result.push([]);
}
let row = 0;
let isAscending = true;
for(let i = 0; i < this.length; i++) {
result[row].push(this[i]);
if(isAscending) {
if(row + 1 === rowsCount) {
isAscending = false;
} else {
row += 1;
}
} else {
if(row === 0) {
isAscending = true;
} else {
row -= 1;
}
}
}
return result;
}
/**
* const arr = [1,2,3,4];
* arr.snail(1,4); // [[1,2,3,4]]
*/
문제 자체는 그래도 손쉽게 해결할 수 있었다.
이중 for문을 사용하지 않고 일차원 배열을 순회하면서 변수로 조건을 주어 문제를 해결하였다.
'코딩테스트 연습' 카테고리의 다른 글
leetcode 코딩테스트 연습 - 2621. Sleep (JavaScript) (0) | 2023.08.27 |
---|---|
leetcode 코딩테스트 연습 - 2722. Join Two Arrays by ID (JavaScript) (0) | 2023.08.20 |
leetcode 코딩테스트 연습 - 1844. Replace All Digits with Characters (JavaScript) (1) | 2023.07.20 |
프로그래머스 코딩테스트 연습 - 롤케이크 자르기 JavaScript (0) | 2023.07.03 |
프로그래머스 코딩테스트 연습 - 무인도 여행 JavaScript (0) | 2023.06.25 |