[프로그래머스/181859] 배열 만들기 6
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
//시간: 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()
로 했다가 오류가 발생했다.Stack
을pop()
하면Stack
의 사이즈가 줄어든다는 걸 명심하자.