[프로그래머스/181859] 배열 만들기 6

☑️ 문제

프로그래머스 181859

☑️ 풀이

첫 번째 풀이

//시간: 51.93ms
//메모리: 142MB

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        List<Integer> stk = new ArrayList<>();
        int i = 0;

        while (i < arr.length) {
            if (stk.size() == 0) {
                stk.add(arr[i]);
                i++;
            } else if (stk.get(stk.size() - 1) == arr[i]) {
                stk.remove(stk.size() - 1);
                i++;
            } else if (stk.get(stk.size() - 1) != arr[i]) {
                stk.add(arr[i]);
                i++;
            }
        }

        int[] answer = new int[stk.size()];
        for (int j = 0; j < stk.size(); j++) {
            answer[j] = stk.get(j);
        }

        return answer.length == 0 ? new int[]{-1} : answer;
    }
}
  • List 를 이용해서 풀었다.

두 번째 풀이

//시간: 55.29ms
//메모리: 144MB

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        Stack<Integer> stack = new Stack<>();
        int i = 0;

        while (i < arr.length) {
            if (!stack.isEmpty() && stack.peek() == arr[i]) {
                stack.pop();
                i++;
            } else if (stack.isEmpty() || stack.peek() != arr[i]) {
                stack.push(arr[i++]);
            }
        }

        int[] answer = new int[stack.size()];
        for (int j = 0; j < answer.length; j++) {
            answer[answer.length - 1 - j] = stack.pop();
        }

        return answer.length == 0 ? new int[]{-1} : answer;
    }
}
  • 다른 사람의 풀이를 보니 Stack 을 썼길래 다시 풀어보았다.
  • Stack → 배열로 변경할 때 for 문 내에서 처음에는 j < stack.size() 로 했다가 오류가 발생했다.
    • Stackpop() 하면 Stack 의 사이즈가 줄어든다는 걸 명심하자.

© 2021. All rights reserved.

yaejinkong의 블로그