정수 배열 numbers
와 정수 num1
, num2
가 매개변수로 주어질 때, numbers
의 num1
번 째 인덱스부터 num2
번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
numbers
의 길이 ≤ 30numbers
의 원소 ≤ 1,000num1
< num2
< numbers
의 길이numbers | num1 | num2 | result |
---|---|---|---|
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
입출력 예 #1
입출력 예 #2
const solution = (numbers, num1, num2) => numbers.splice(num1,num2);
/*
분명히 이 코드로 테스트까지 통과 하여정답 제출을 하였는데 틀렸다는 결과를 받았다🥲
내가 작성하였던 코드는 splice를 통해서 제거된 요소를 반환하게끔하여 결과값은 어차피 동일하니까
테스트 결과도 정답으로 나올줄 알았는데 코딩테스트에서 요구하는 문제에서는 splice는 정답으로 해주지 않는것 같다..
한번 더 정리 해보자면 splice 메소드는 배열에서 요소를 제거하거나 새 요소를 추가하는데 사용되는데,
해당 코드에서는 splice 메소드를 사용하여 요소를 자르기만 하고 새 배열을 반환하지 않는다.
splice 메소드는 원본 배열을 수정하며, 제거된 요소들을 반환한다. 따라서 원본 배열이 수정되고,
이로 인해 실패하는 것 같다.
*/
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)
}
/* 위의 화살표함수를 선언문으로 변경해보았다. */
const solution = (numbers, num1, num2) => numbers.splice(num1, num2-num1+1);
/*
이건 다른분이 작성한 코드를 보다가 내가 처음 작성한 코드와 비슷한데 이 코드는 통과 된 코드여서 한번 가져와봤다.
이 코드는 왜 되는거지..? ? numbers.splice(num1, num2-num1+1) 이거나 numbers.splice(num1, num2) 이거나 같은 말 아닌가..
*/
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의 인덱스를 이용하여 코드를 작성했다.
*/