코딩테스트(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
반응형