37일차 TIL : 프로그래머스

변시윤·2022년 12월 6일
0

내일배움캠프 4기

목록 보기
38/131

학습내용

프로그래머스 0단계


2차원으로 만들기

문제
정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

제한사항

  • num_list의 길이는 n의 배 수개입니다.
  • 0 ≤ num_list의 길이 ≤ 150
  • 2 ≤ n < num_list의 길이
num_listnresult
[1, 2, 3, 4, 5, 6, 7, 8]2[[1, 2], [3, 4], [5, 6], [7, 8]]
function solution(num_list, n) {
  var answer = [];

  for (i = 0; i < num_list.length / n; i++) {
    answer.push(num_list.slice(i * n, i * n + n));
  }
  return answer;
}
  1. 배열 내 배열 갯수 구하기
    num_listn의 배수이므로 배열의 요소가 8개라면 배열내 배열 갯수는 4개이다. 즉, num_listn으로 나눈 값이다. 이를 for문에 적용시 4번만 돌면 된다는 의미이므로 i < num_list.length / n; 이라는 조건을 적용한다. console.log(i) 실행시 0 1 2 3을 반환한다. (n으로 나누지 않으면 0부터 7까지를 모두 반환한다.)

  2. 배열 내 배열 생성
    위 결과를 토대로 slice() 메서드로 num_list의 요소들을 일정한 갯수로 나눠서 새배열로 생성한다.
    num_list.slice(i * n, i * n + n) 풀이

    • i = 0 : num_list.slice(0 * 2, 0 * 2 + 2) = num_list.slice(0, 2) = [1, 2]
    • i = 1 : num_list.slice(1 * 2, 1 * 2 + 2) = num_list.slice(2, 4) = [3, 4]
    • i = 2 : num_list.slice(2 * 2, 2 * 2 + 2) = num_list.slice(4, 6) = [5, 6]
    • i = 3 : num_list.slice(3 * 2, 3 * 2 + 2) = num_list.slice(6, 8) = [7, 8]
  3. 새로 생성한 배열을 answerpush

slice(begin, end)
배열의 일부분을 잘라내어 새로운 배열 생성하는 배열 메서드. begin은 시작 인덱스, end는 종료 인덱스에 해당된다. 단, 종료 인덱스는 해당 인덱스의 바로 앞 인덱스까지만을 반환한다. 종료 인덱스 생략시 시작 인덱스부터 배열의 마지막 요소까지를 잘라낸다.

slice 메서드를 사용하는 것까지만 생각하고 구체적인 로직은 모르겠어서 이 글을 참고했다. 작성자분 감사합니다....

profile
개그우먼(개발을 그은성으로 하는 우먼)

0개의 댓글