[Programmers] #181860 - 빈 배열에 추가, 삭제하기 [Java][C++][Python]
[Programmers] #181860 - 빈 배열에 추가, 삭제하기 [Java][C++][Python]
1. 아이디어
빈 배열 X에 대해 길이가 같은 정수 배열 arr과 boolean 배열 flag가 주어지며 flag[i]가 true면 X의 뒤에 arr[i]를 arr[i] * 2번 추가하고, false면 X의 뒤쪽 원소 arr[i]개를 제거하는 과정을 반복하면 된다. 조건 분기를 통해 요구사항에 맞게 구현만 하면 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = arr의 길이 = flag의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < flag.length; i++) {
if (flag[i]) {
for (int j = 0; j < arr[i] * 2; j++) {
list.add(arr[i]);
}
} else {
for (int j = 0; j < arr[i]; j++) {
list.removeLast();
}
}
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> arr, vector<bool> flag) {
vector<int> v;
for (int i = 0; i < flag.size(); i++) {
if (flag[i]) {
for (int j = 0; j < arr[i] * 2; j++) {
v.push_back(arr[i]);
}
} else {
for (int j = 0; j < arr[i]; j++) {
v.pop_back();
}
}
}
return v;
}
1
2
3
4
5
6
7
8
9
10
def solution(arr, flag):
res = []
for a, f in zip(arr, flag):
if f:
res += [a] * (a * 2)
else:
del res[-a:]
return res
This post is licensed under CC BY 4.0 by the author.