Post

[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.