30min
- 바로 붙어있는 중복값만 제거 해야함
- 주어진 배열은 -> for문을 통해 Stack에 넣기
- 이 때, Stack의 peek (head를 빼서
확인
만 함)을 사용해서 다음에 들어올 arr의 숫자와 stack의 head가 같지 않을때만 stack에 배열을 넣어줌- 출력할 때는 원래 배열의 순서와 같게 나와줘야 하기 때문에 stack의 head를 정답 배열의 가장 마지막부터 채워줄 수 있도록 역순으로 for문을 돌려준다.
public static int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
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]);
}
}
int N = stack.size();
int[] answer = new int[N];
for(int i=N-1; i>=0; i--){
answer[i] = stack.pop();
}
return answer;
}
stack.pop을 썼다가, 첫번째 for문 루트를 돌 때 stack.pop으로 검사를 할 때 마다 stack에서 값이 사라져서 계속 0,1을 벗어나지 못하고 도돌이표가 되었었다.... peek, pop 구분 꼭하자! ㅎㅎ
peek -> 헤드값을 확인
pop -> 헤드값을 확인 후 제거