💡 문제
💬 입출력 예시
📌 풀이(소스코드)
1. 스택을 이용하지 않은 풀이
import java.util.*;
public class Solution {
public List<Integer> solution(int []arr) {
ArrayList<Integer> answer = new ArrayList<>();
int value = -1;
for (int num: arr) {
if (num != value) {
value = num;
answer.add(num);
}
}
return answer;
}
}
2. 스택을 이용한 풀이
import java.util.*;
public class Solution {
public List<Integer> solution(int []arr) {
ArrayList<Integer> answer = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
for (int num: arr) {
if (stack.isEmpty() || stack.peek() != num) {
stack.push(num);
answer.add(num);
}
}
return answer;
}
}
📄 해설
접근
- 스택을 이용하여 간단하게 해결 가능한 문제
- 스택을 이용하지 않아도 해결이 가능한 문제이지만, 고득점 킷에서의 분류는 스택/큐 이므로 스택으로도 풀어봤다.
- 효율성에 대한 결론만 말하면 스택을 이용한 풀이가 더 느리다.
과정
- 배열
arr
을 순회하면서 이전 숫자의 값인 value
와 현재 숫자가 다르면 value
의 값을 현재 숫자로 바꾸고 answer
에 추가한다.
스택 풀이 과정
- 배열
arr
을 순회하면서 스택이 비어있지 않고 스택의 탑이 현재 숫자와 다르다면 스택에 현재 숫자를 넣고 answer
리스트에 추가한다.
- 숫자가 연속되지 않아야하므로 스택의 탑과 달라야한다.