본문 바로가기

코딩테스트/프로그래머스

[프로그래머스 JAVA] 181893. 배열 조각하기

문제 링크


 

프로그래머스

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

programmers.co.kr

접근 방법


List로 변환해 인덱스까지 잘라줍니다.

소스 코드


import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        
        List<Integer> arrayList = Arrays.stream(arr)
                                         .boxed()
                                         .collect(Collectors.toCollection(ArrayList::new));
        
        for (int i = 0; i < query.length; i++) {
            if (i % 2 == 0) {
                arrayList.subList(query[i] + 1, arrayList.size()).clear();
            } else {
                arrayList.subList(0, query[i]).clear();
            }
        }
        
        return arrayList.stream().mapToInt(Integer::intValue).toArray();
    }
}

코드 설명


문제에서 요구하는 대로 짝수일 때는 query[i] 인덱스 뒤로 없애고, 홀수일 때는 앞을 잘라 없앴습니다.

하지만 계속 자를 필요 없이, 잘라야 되는 길이를 다 더한 후, 마지막에만 실제로 잘라주는 방법이 있었습니다.

개선 코드


import java.util.*;

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

        return Arrays.copyOfRange(arr, s, e + 1);
    }
}