정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
2 ≤ numbers의 길이 ≤ 30
0 ≤ numbers의 원소 ≤ 1,000
0 ≤num1 < num2 < numbers의 길이
생각한 풀이
1. 파이썬이면 한 줄로 끝낼 수 있겠다.
2. 자바에서는 배열을 인덱스 기준을 자르는 함수가 있나?
3. for문으로 단순하지만 가장 기초적인 방법으로 풀자
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2-num1+1];
int k=0;
for(int i=num1;i<=num2;i++){
answer[k]=numbers[i];
k++;
}
return answer;
}
}
🐴 풀이
1. 문제에서 언급한 것처럼 num1부터 num2까지 출력하니 i=num1, i<=num2 로 범위를 설정
2. 해당 값을 새로운 배열 answer에 넣을때 answer에는 처음부터 들어가닌 변수 k로 0부터 삽입
3. 주어진 배열 numbers[i] 값을 넣고 answer의 인덱스 값 증가를 위해 k++
4. 배열 answer 생성할때 범위를 num2-num1+1로 설정 (num1에서 num2까지의 수를 받아줘야 함)
ex) 3부터 5까지라면 5-3=2, 하지만 받는 값의 수는 3,4,5로 2라서 +1을 해준다
아래는 Arrays.copyOfRange()를 통해 배열을 자르는 방법이다
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
return Arrays.copyOfRange(numbers, num1, num2 + 1);
}
}
🐴 풀이
1. 파이썬에서 arr[num1:num2+1]과 동일하게 작동한다
2. Arrays.copyOfRange()의 파라미터는 자를 원본 배열, 시작, 끝 지점이다
3. public static T[] copyOfRange(T[] original, int from, int to)