꺾이지 않는 마음

[프로그래머스] Lv.0 2차원으로 만들기 JS 풀이 본문

코딩테스트 기록

[프로그래머스] Lv.0 2차원으로 만들기 JS 풀이

중요한 것은 2022. 10. 29. 01:41

🧡문제 설명

정수 배열 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 result
[1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]

💛제한사항

  • 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]]
[100, 95, 2, 4, 5, 6, 18, 33, 948] 3 [[100, 95, 2], [4, 5, 6], [18, 33, 948]]

💙입출력 예 설명

입출력 예 #1

  • num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 2 * 4 배열로 변경한 [[1, 2], [3, 4], [5, 6], [7, 8]] 을 return합니다.

입출력 예 #2

  • num_list가 [100, 95, 2, 4, 5, 6, 18, 33, 948] 로 길이가 9이고 n이 3이므로 3 * 3 배열로 변경한 [[100, 95, 2], [4, 5, 6], [18, 33, 948]] 을 return합니다.

✨나의 풀이

💜 for 반복문 속에 slice(i, i+n) 메서드 활용

function solution(num_list, n) {
    let answer = [];
    
    for (let i = 0; i<=num_list.length-1; i+=n) {
        answer.push(num_list.slice(i, i+n));
    }
 return answer;   
}

 

반복문을 안에서 배열을 n의 갯수만큼 앞에서부터 잘라주었다.

그리고 push 메서드를 통해 answer 배열 하나씩 추가해주었다.

slice 메서드는 원본 배열을 변경하지 않기 때문에 slice의 파라미터를 계속해서 늘려주었다(i, i+n).

정답을 제출하고나서 보니까 이럴거면 그냥 반복문 속에 splice(0, n) 메서드를 쓰면 되지 않나? 란 생각이 들었다.

 

 

😮다른 풀이

function solution(num_list, n) {
    var answer = [];

    while(num_list.length) {
        answer.push(num_list.splice(0,n));
    }

    return answer;
}

 

역시나 splice() 메서드를 활용해서 앞에서부터 계속해서 원본을 삭제하는 풀이법이 있었다.

내가 쓴 slice() 메서드 활용법이랑 비슷한 풀이인데, 훨씬 코드가 간결하다.

for 반복분처럼 조건식을 막 쓸 필요가 없기 때문에..

 

이 풀이에서 눈 여겨 볼 점은 while의 조건문을 num_list.length로 했다는 점!

splice 메서드는 원본 배열을 변경하기 때문에, 계속해서 자르다 보면 배열의 원소가 전부 없어진다.

위 조건식에서 배열의 길이가 0이 되면 조건식이 false가 될테니 반복문이 자연스레 종료된다.

 

반복문의 조건식에 배열의 길이를 넣는 방식 하나 머리에 담고 간다.

 

오늘도 성장 +1 스택

Comments