Post

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