학습내용
프로그래머스 0단계
문제
정수 배열 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_list n result [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;
}
배열 내 배열 갯수 구하기
num_list
는 n
의 배수이므로 배열의 요소가 8개라면 배열내 배열 갯수는 4개이다. 즉, num_list
를 n
으로 나눈 값이다. 이를 for
문에 적용시 4번만 돌면 된다는 의미이므로 i < num_list.length / n;
이라는 조건을 적용한다. console.log(i)
실행시 0
1
2
3
을 반환한다. (n
으로 나누지 않으면 0
부터 7
까지를 모두 반환한다.)
배열 내 배열 생성
위 결과를 토대로 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]새로 생성한 배열을 answer
에 push
slice(begin, end)
배열의 일부분을 잘라내어 새로운 배열 생성하는 배열 메서드.begin
은 시작 인덱스,end
는 종료 인덱스에 해당된다. 단, 종료 인덱스는 해당 인덱스의 바로 앞 인덱스까지만을 반환한다. 종료 인덱스 생략시 시작 인덱스부터 배열의 마지막 요소까지를 잘라낸다.
slice
메서드를 사용하는 것까지만 생각하고 구체적인 로직은 모르겠어서 이 글을 참고했다. 작성자분 감사합니다....