[Javascript] Lv.0 배열 자르기

은비·2023년 7월 28일
1

Programmers_CodingTest

목록 보기
23/72

문제 설명

정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이

입출력 예

numbersnum1num2result
[1, 2, 3, 4, 5]13[2, 3, 4]
[1, 3, 5]12[3, 5]

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4, 5]의 1번째 인덱스 2부터 3번째 인덱스 4 까지 자른 [2, 3, 4]를 return 합니다.

입출력 예 #2

  • [1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.

✍ SOLUTION1 테스트 실행결과는 통과지만 제출결과는 실패

const solution = (numbers, num1, num2) => numbers.splice(num1,num2);

/*
분명히 이 코드로 테스트까지 통과 하여정답 제출을 하였는데 틀렸다는 결과를 받았다🥲
내가 작성하였던 코드는 splice를 통해서 제거된 요소를 반환하게끔하여 결과값은 어차피 동일하니까 
테스트 결과도 정답으로 나올줄 알았는데 코딩테스트에서 요구하는 문제에서는 splice는 정답으로 해주지 않는것 같다..

한번 더 정리 해보자면 splice 메소드는 배열에서 요소를 제거하거나 새 요소를 추가하는데 사용되는데, 
해당 코드에서는 splice 메소드를 사용하여 요소를 자르기만 하고 새 배열을 반환하지 않는다.
splice 메소드는 원본 배열을 수정하며, 제거된 요소들을 반환한다. 따라서 원본 배열이 수정되고, 
이로 인해 실패하는 것 같다.
*/

✍ SOLUTION2

const solution = (numbers, num1, num2) => numbers.slice(num1, num2 + + 1);

/*
SOLUTION1의 채점 결과 실패 후 작성한 코드이다. slice 메서드를 이용하여 num1부터 num2+1까지 복사해주었다. 
numbers.slice(num1, num2)로 작성하게 되면 num2를 포함하지 않기때문에 num2에 +1을해주었다.
*/
function solution(numbers, num1, num2) {
  numbers.slice(num1, num2 +1)
}

/* 위의 화살표함수를 선언문으로 변경해보았다. */

✍ SOLUTION3

const solution = (numbers, num1, num2) => numbers.splice(num1, num2-num1+1);

/*
이건 다른분이 작성한 코드를 보다가 내가 처음 작성한 코드와 비슷한데 이 코드는 통과 된 코드여서 한번 가져와봤다. 
이 코드는 왜 되는거지..? ? numbers.splice(num1, num2-num1+1) 이거나 numbers.splice(num1, num2) 이거나 같은 말 아닌가..
*/

✍ SOLUTION4

const solution = (numbers, num1, num2) => {
  let arr = [];
  for(let i = num1; i <= num2; i += 1) {
    arr.push(numbers[i]);
  } return arr;
} 

/*  
slice를 이용하는 방식이 제일 간단하지만 다른 방식으로도 풀이해보고 싶어서 작성해보았다.
for문을 이용하여 num1부터 num2까지 1씩증가하여 number의 인덱스를 이용하여 코드를 작성했다.
*/

프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글