[JAVA]배열 자르기
문제 설명
정수 배열 numbers
와 정수 num1
, num2
가 매개변수로 주어질 때, numbers
의 num1
번 째 인덱스부터 num2
번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
My Solution
Code
import java.util.ArrayList;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
if (i >= num1 && i <= num2) {
answer.add(numbers[i]);
}
}
int[] answer2 = new int[answer.size()];
for (int i = 0; i < answer.size(); i++) {
answer2[i] = answer.get(i);
}
return answer2;
}
}
Approach
Java에 대한 이해도가 낮아 다음과 같이 순차적으로 접근해서 풀었다.
- ArrayList 로 선언후 정답에 필요한 값만 저장
- num1과 num2를 index로 보고 numbers 배열에 이 사이에 존재하는 값이 정답
- ArrayList는 정답에서 요구하는 Return Type이 아니기 때문에 Return Type 용 answer2를 따로 생성해서 초기화한 후 리턴함
뭔가 비효율적인 방식으로 보인다
- 정답으로 리턴해야되는 변수 2개를 사용 중
- 정답을 초기화해야하기 떄문에 for 문 2번 사용
Enhanced
01. copyOfRange 사용하기
정답 코드를 참조하니 다음과 같은 풀이 법이 존재한다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
return Arrays.copyOfRange(numbers, num1, num2 + 1);
}
}
Arrays.copyOfRange()
- 특정 배열의 원하는 범위만큼 복사해서 새로운 배열을 만드는 메서드이다.
- Return Type은 int[] 이다.
02. to~from 인덱스 차이 계산하기
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2 - num1 + 1];
for (int i = num1; i <= num2; i++) {
answer[i - num1] = numbers[i];
}
return answer;
}
}
정답용 배열을 초기화해두고 해당 배열에 주어진 num1, num2의 인덱스 만큼의 범위를 잡아 for문을 돌린다.
Leave a comment