프로그래머스 배열 조각하기

KIMYEONGJUN·2026년 6월 16일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.

내가 이 문제를 보고 생각해본 부분

solution 메서드는 입력 배열 arr와 쿼리 배열 query를 받아 마지막 남은 배열 구간을 찾아 반환하는 기능을 한다.
처음에 배열 전체 범위를 start = 0과 end = arr.length - 1로 설정한다.
쿼리 배열을 순회하면서 현재 인덱스가 짝수인지 홀수인지에 따라 배열의 남은 범위를 조정한다.
짝수 인덱스일 때는 end를 start + query[i]로 바꾸어 배열의 뒷부분을 잘라낸다.
홀수 인덱스일 때는 start를 start + query[i]로 바꾸어 배열의 앞부분을 잘라낸다.
이 과정을 통해 배열의 시작과 끝 인덱스가 점점 좁혀져 마지막 남은 부분만 남게 된다.
반복문이 끝난 뒤에는 start와 end 사이 구간 크기를 계산해 새 배열 answer를 만든다.
그 후 남은 구간에 해당하는 요소들을 원본 배열에서 복사해 answer에 저장한다.
main 메서드에서는 예시 배열과 쿼리를 넣고 solution을 호출하여 결과를 출력한다.
출력 형식은 [요소1, 요소2, ..., 요소n]과 같이 해 가독성을 높였다.

코드로 구현

class Solution {
    public int[] solution(int[] arr, int[] query) {
        int start = 0;
        int end = arr.length - 1;

        for (int i = 0; i < query.length; i++) {
            if (i % 2 == 0) { 
                end = start + query[i];
            } else { 
                start = start + query[i];
            }
        }

        int length = end - start + 1;
        int[] answer = new int[length];
        for (int i = 0; i < length; i++) {
            answer[i] = arr[start + i];
        }

        return answer;
    }
}

프로그래머스 코드

package programmers;

// 프로그래머스 배열 조각하기
public class Main52 {
    public static int[] solution(int[] arr, int[] query) {
        int start = 0;
        int end = arr.length - 1;

        for (int i = 0; i < query.length; i++) {
            if (i % 2 == 0) {
                end = start + query[i];
            } else {
                start = start + query[i];
            }
        }

        int length = end - start + 1;
        int[] answer = new int[length];
        for (int i = 0; i < length; i++) {
            answer[i] = arr[start + i];
        }

        return answer;
    }

    public static void main(String[] args) {
        int[] arr = {0, 1, 2, 3, 4, 5};
        int[] query = {4, 1, 2};

        int[] result = solution(arr, query);

        System.out.print("[");
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i]);
            if (i != result.length - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("]");
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글