Post

[Programmers] #181893 - 배열 조각하기 [Java][C++][Python]

[Programmers] #181893 - 배열 조각하기 [Java][C++][Python]

문제 링크


1. 아이디어

정수 배열 query에 대해 인덱스가 짝수면 arr를 0번째부터 query[i]번째까지 남기고, 홀수면 query[i]번째부터 끝까지 남기는 과정을 반복하면 된다. 각 단계마다 남은 배열을 새롭게 만들어 arr에 대입하면 깔끔하게 연속된 쿼리를 처리할 수 있다.


2. 복잡도

접근시간공간
풀이$O(N \times Q)$$O(N)$

($N$ = arr의 길이, $Q$ = query의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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, query[i], arr.length);
            } else {
                arr = Arrays.copyOfRange(arr, 0, query[i] + 1);
            }
        }

        return arr;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<int> arr, vector<int> query) {
    for (int i = 0; i < query.size(); i++) {
        if (i % 2) {
            arr = vector<int>(arr.begin() + query[i], arr.end());
        } else {
            arr = vector<int>(arr.begin(), arr.begin() + query[i] + 1);
        }
    }

    return arr;
}
1
2
3
4
5
def solution(arr, query):
    for i, q in enumerate(query):
        arr = arr[q:] if i % 2 else arr[: q + 1]

    return arr

This post is licensed under CC BY 4.0 by the author.