[프로그래머스] Java 코딩테스트 - 배열 자르기 (copyOfRange)

yihyun·2025년 3월 27일

코딩테스트

목록 보기
26/105
post-thumbnail

배열자르기

✅ 문제 설명

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

✅ 제한사항

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

🔽 소스코드 1 (반복문 사용)

💻 풀이

  • 배열의 길이를 설정해 준다. num2 - num + 1 (배열은 0부터 시작이기 때문에 + 1을 해준다.)
  • 이후 for문을 사용해 num1 부터 num2 까지의 배열을 int[]에 넣어준다.
    ❗(설정하지 않거나 크기가 맞지 않으면 ArrayIndexOutOfBoundsException 에러가 발생한다.)
  • length -1 로 가장 뒤에 값을 꺼내주고 - i 를 해주어 하나씩 앞 배열로 이동해준다.

시간 0.01ms ~ 0.02ms

	public int[] solution(int[] num_list) {
		
		int[] answer = new int[num2 - num1 +1];
        
        for(int i = num1, j = 0; i <= num2; i++, j++) {
        	answer[j] = numbers[i];
        }
        
        return answer;
	}

🔽 소스코드 2 (copyOfRange 사용)

💻 풀이

  • 반복문을 사용하지 않기 위해 특정 index부터 다른 index 까지 자를 수 있는 copyOfRange를 사용해준다.

🧡 copyOfRange(원본 배열, from index, to index) : 배열의 특정 범위를 복사해 새로운 배열을 반환해준다.
→ 원본 배열은 변환되지 않고 from ~ to -1 까지 처리된다. (to는 포함되지 않는다.)

시간 0.02ms ~ 0.03ms

import java.util.Arrays;

    public int[] solution1(int[] numbers, int num1, int num2) {
    	
        int[] answer = Arrays.copyOfRange(numbers, num1, num2 + 1);
        
        return answer;
    }

반복문과 copyOfRange는 수행시간은 큰 차이가 없기 때문에 저 함수를 기억하고 앞으로도 사용하면 좋을 것 같다!!

profile
개발자가 되어보자

0개의 댓글