[Programmers] #181918 - 배열 만들기 4 [Java][C++][Python]
[Programmers] #181918 - 배열 만들기 4 [Java][C++][Python]
1. 아이디어
주어진 과정을 반복해서 단조 스택을 직접 만들어가는 문제로 변수 i를 만들어 i가 arr의 길이보다 작은 동안 시뮬레이션을 돌리면 된다.
루프 내에서는 stk가 빈 배열인 경우 또는 마지막 원소가 arr[i]보다 작은 경우에는 arr[i]를 stk에 추가하고, 아닌 경우에는 stk의 마지막 원소를 제거하면 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = arr의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int[] stk = new int[arr.length];
int i = 0;
int idx = 0;
while (i < arr.length) {
if (idx == 0 || stk[idx - 1] < arr[i]) {
stk[idx++] = arr[i++];
} else {
idx--;
}
}
return Arrays.copyOf(stk, idx);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> stk;
int i = 0;
while (i < arr.size()) {
if (stk.empty() || stk.back() < arr[i]) {
stk.push_back(arr[i++]);
} else {
stk.pop_back();
}
}
return stk;
}
1
2
3
4
5
6
7
8
9
10
11
12
def solution(arr):
stk = []
i = 0
while i < len(arr):
if not stk or stk[-1] < arr[i]:
stk.append(arr[i])
i += 1
else:
stk.pop()
return stk
This post is licensed under CC BY 4.0 by the author.