💡 문제
문제설명
🤔 고민사항
- 전형적인 스택 또는 큐를 사용하면 되는 간단한 문제였다.
- 사실 프로그래머스에 익숙하지 않아, '정답 배열에 값을 어떻게 추가하지???' 라는 굉장히 초보적이고 부끄러운 고민을 잠시 했다.
(백준이나 코드트리였으면 정답 배열을 반환하는게 아니라 그냥 찍어내면 됐으니까)
- 어쨌든, 파라메터로 주어진 배열에서 중복된 숫자를 제거하여 반환하면 되는 문제다.
주의해야할 요소는 '주어진 배열의 순서'를 지켜야 한다는 것. 스택이던 큐던 FIFO, FILO 속성을 잘 활용하면 쉬운 문제다.
- 나 같은 경우 스택 하나로 구현했다. 입력 배열의 원소를 순차적으로 스택에 넣을건데,
(1) 스택의 peek() 메서드를 통해 가장 마지막에 추가된 토큰을 확인할 수 있고, 중복값이 들어올 때 peek()을 통해 확인하고 스택에 안 넣으면 그만이다.
- (2) 스택의 크기만큼 int배열을 초기화하고,
(3) 배열의 뒷 인덱스부터 스택값을 pop하여 초기화해주면 순서를 원복시킬 수 있다.
👨💻 CODE
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int[] answer = {};
Stack<Integer> stack = new Stack<Integer>();
// (1)
for(int i=0; i<arr.length; i++){
if(stack.isEmpty()){
stack.push(arr[i]);;
}else{
if(stack.peek() != arr[i])
stack.push(arr[i]);
}
}
// (2)
answer = new int[stack.size()];
int n = stack.size();
// (3)
for(int i=n-1; i>=0; i--)
answer[i] = stack.pop();
return answer;
}
}```