성장일기

내가 보려고 정리하는 공부기록

코딩테스트/프로그래머스 Lv.0

[프로그래머스] 배열 조각하기 ( Arrays.copyOfRange ) - JAVA

와나나나 2023. 8. 28. 16:41
728x90

프로그래머스 _ 코딩 기초 트레이닝 DAY 12 - (5)

출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181893

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 |  정수 배열 arr와 query가 주어집니다.

query를 순회하면서 다음 작업을 반복합니다.

  • 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
  • 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.

위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.

 

입력 #1 | arr=[0,1,2,3,4,5] query=[4,1,2]

출력 #1 | [1,2,3]


>> 풀이 <<

처음에는 리스트로 바꾸어 풀려고 했으나, array에도 적당한 메소드가 있지 않을까 해서 찾아보았다!

찾아본 결과, 배열을 원하는 범위만큼 복사해주는 메소드가 있다는 것을 알게되었다. 

 

for문을 이용하여 query를 순차적으로 받아주고, query배열 index를 짝수/홀수 경우를 나누어 위 메소드를 이용해주면 해결할 수 있다.

  • 원하는 범위만큼 배열 복사 - Arrays.copyOfRange()
    • copyOfRange(arr, startidx, endidx + 1)은 원하는 배열을 arr에 넣고, 시작인덱스와 끝인덱스를 설정해 그만큼의 배열을 복사해주는 메소드이다.
  • query배열 for문 돌리기 - 기존 for문 사용
    • 문제를 제대로 이해하지 못해 forEach문을 사용했다가 원하는 답을 얻지 못했다..! 짝수 홀수 판단은 query배열의 index를 기준으로 하고, 배열을 자르는 것은 query의 요소를 기준으로 하는 문제이다

코드는 다음과 같다

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        for (int i = 0; i < query.length; i++) {
            if (i % 2 == 0) {
                arr = Arrays.copyOfRange(arr, 0, query[i]+1);
            } else {
                arr = Arrays.copyOfRange(arr, query[i], arr.length);
            }
        }
        return arr;
    }
}