Algorithm/Javascript로 코테 준비하기
[JS로 코테 준비하기] 9. 프로그래머스 - 2차원 바꾸기 (feat. splice)
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/120842
1. splice
- splice는 배열의 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경함
- splice의 인자: 배열의 변경을 시작할 인덱스(
start
), 배열에서 제거할 요소의 수(deleteCount
), 배열에 추가할 요소(item
) - spice의 반환값: 제거한 요소를 담은 배열
2. start만 넘겨준 경우
start
부터 마지막 요소를 제거
const arr = [1, 2, 3, 4, 5]; //모든 splice 실행 앞에 새로 선언한다고 가정
const deleteAll = arr.splice(0);
console.log(deleteAll); //[1, 2, 3, 4, 5];
console.log(arr); //[];
const deleteFrom2toFin = arr.splice(2);
console.log(deleteFrom2toFin); //[3, 4, 5];
console.log(arr); //[1, 2];
3. deleteCount를 같이 넘겨준 경우
start
부터deleteCount
개의 요소를 제거
const arr = [1, 2, 3, 4, 5];
const deleteFrom0to2 = arr.splice(0, 2);
console.log(deleteFrom0to2); //[1, 2];
console.log(arr); //[3, 4, 5];
4. item도 넘겨준 경우
start
부터deleteCount
개의 요소를 제거 + 기존 배열의start
위치에item
추가
const arr = [1, 2, 3, 4, 5]; //모든 splice 실행 앞에 새로 선언한다고 가정
const add6Idx0 = arr.splice(0, 2, 6);
console.log(add6Idx0); //[1, 2];
console.log(arr); //[6, 3, 4, 5];
const add678Idx1 = arr.splice(1, 2, 6, 7, 8);
console.log(add678Idx1); //[2, 3];
console.log(arr); //[1, 6, 7, 8, 4, 5];
5. 소스 코드의 변천사
splice에 대한 내용의 정리 글이지만, 초기 정답은 이와 거리가 멀었다.
문제를 보자마자 아래처럼 풀었기 때문.. (언제쯤 자연스럽게 함수형으로 짤까)
function solution(num_list, n) {
let answer = [];
const len = num_list.length / n;
for(let i = 0; i < len; i++){
let tmp = [];
for(let j = 0; j < n; j++){
tmp.push(num_list[i * n + j]);
}
answer.push(tmp);
}
return answer;
}
1차 수정 POINT
splice
활용
//이걸
let tmp = [];
for(let j = 0; j < n; j++){
tmp.push(num_list[i * n + j]);
}
answer.push(tmp);
//이렇게
answer.push(num_list.splice(0, n));
2차 수정 POINT
i
의 필요성이 사라져while
로 변경
function solution(num_list, n) {
let answer = [];
let len = num_list.length / n;
while(len--){
answer.push(num_list.splice(0, n));
}
return answer;
}
3차 수정 POINT (최종)
splice
는 원본 배열을 바꾼다는 점 활용 (=num_list
의 수가 계속 변경됨을 이용)
function solution(num_list, n) {
let answer = [];
while(num_list.length){
answer.push(num_list.splice(0, n));
}
return answer;
}
반응형
'Algorithm > Javascript로 코테 준비하기' 카테고리의 다른 글
[JS로 코테 준비하기] 11. 프로그래머스 - 안전지대 (feat. 2차원 배열 탐색 관련) (0) | 2023.01.15 |
---|---|
[JS로 코테 준비하기] 10. 프로그래머스 - 이진수 더하기 (feat. 2진수 <-> 10진수) (0) | 2023.01.07 |
[JS로 코테 준비하기] 8. 프로그래머스 - 배열 회전시키기 (feat. shift, unshift) (0) | 2022.12.24 |
[JS로 코테 준비하기] 7. 프로그래머스 - 약수 구하기 (feat. 1부터 n까지 배열) (2) | 2022.12.18 |
[JS로 코테 준비하기] 6. 프로그래머스 - 순서쌍의 개수 (feat. 시간복잡도 제한) (0) | 2022.11.27 |