[JAVA]배열 자르기

문제 설명

정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, 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에 대한 이해도가 낮아 다음과 같이 순차적으로 접근해서 풀었다.

  1. ArrayList 로 선언후 정답에 필요한 값만 저장
    1. num1과 num2를 index로 보고 numbers 배열에 이 사이에 존재하는 값이 정답
  2. ArrayList는 정답에서 요구하는 Return Type이 아니기 때문에 Return Type 용 answer2를 따로 생성해서 초기화한 후 리턴함

뭔가 비효율적인 방식으로 보인다

  1. 정답으로 리턴해야되는 변수 2개를 사용 중
  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문을 돌린다.

Categories:

Updated:

Leave a comment