코딩테스트(JavaScript)/코딩테스트 입문
프로그래머스- 2차원으로 만들기
paintover23
2023. 9. 4. 18:09
728x90
프로그래머스 레벨 0 Day10에 돌입했다.
2차원 배열은 코딩테스트에 단골로 등장하는 문제이니 만큼 잘 짚고 넘어가는게 중요하겠다.
[0,1,2,3,4,5,6,7,8] 에서 slice 메소드를 활용해 n길이 만큼 뽑아내는 것 까지는 성공하였으나,
요소간 중복되지 않고 [[0,1], [2,3], [4,5], [6,7]] 와 같이 뽑아내는데 아래와 같이 어려움을 겪었다.
// 시도과정
function solution(num_list, n) {
let arr = [];
for (let i = 0; i < num_list.length; i++) {
arr.push(num_list.slice(i, i + n));
// arr [[1,2], [2,3], [3,4], [4,5], [5,6]...]
// 원하는 답: [[1,2], [3,4], [5,6], [7,8]...]
console.log('arr', arr);
}
let arr2 = [];
for (let j = 0; j < arr.length; j++) {
arr2.push(arr[j]);
arr2.push(arr[j + n]);
console.log('arr[j]', arr[j]);
console.log('arr[j+n]', arr[j + n]);
}
return arr2;
}
[배운점]
- for 문 활용시에 인덱스가 1씩 커지는 것만 다뤘는데 본 문제를 통해서 원하는 규칙의 인덱스만 뽑아내는 방법을 배웠다.
// 정답
function solution(num_list, n) {
let arr = [];
for (let i = 0; i < num_list.length; i += n) {
arr.push(num_list.slice(i, i + n));
}
return arr;
}
num_list : [1, 2, 3, 4, 5, 6, 7, 8] 일 때,
i+= n을 통해 i=0, i=2, i=4, i=6 요소만 추출하는 것이 가능하다.
이 경우, 아래와 같은 흐름으로 코드가 동작하게 된다.
i = 0일 때, num_list.slice(0, 0 + 2)는 [1, 2]를 반환하고, 이 배열을 arr에 추가
i = 2일 때, num_list.slice(2, 2 + 2)는 [3, 4]를 반환하고, 이 배열을 arr에 추가
i = 4일 때, num_list.slice(4, 4 + 2)는 [5, 6]을 반환하고, 이 배열을 arr에 추가
i = 6일 때, num_list.slice(6, 6 + 2)는 [7, 8]을 반환하고, 이 배열을 arr에 추가
728x90
반응형