[Programmers] #181893 - 배열 조각하기 [Java][C++][Python]
정수 배열과 쿼리 배열을 받아 각 쿼리마다 배열의 앞이나 뒤를 잘라내고 남은 배열을 반환하는 워밍업 문제.
[Programmers] #181893 - 배열 조각하기 [Java][C++][Python]
1. 아이디어
query를 앞에서부터 순서대로 처리한다. 쿼리 인덱스가 짝수면 arr를 0번째부터 query[i]번째까지(양끝 포함) 남기고, 홀수면 query[i]번째부터 끝까지 남긴다. 매 단계에서 잘라낸 배열을 다음 쿼리의 대상으로 넘겨 마지막까지 반복한다.
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.