[스택/큐] 같은 숫자는 싫어

Wintering·2022년 8월 22일
0

Algorithm

목록 보기
12/16

30min

  1. 바로 붙어있는 중복값만 제거 해야함
    • 주어진 배열은 -> for문을 통해 Stack에 넣기
    • 이 때, Stack의 peek (head를 빼서 확인만 함)을 사용해서 다음에 들어올 arr의 숫자와 stack의 head가 같지 않을때만 stack에 배열을 넣어줌
  2. 출력할 때는 원래 배열의 순서와 같게 나와줘야 하기 때문에 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;
    }

Point

stack.pop을 썼다가, 첫번째 for문 루트를 돌 때 stack.pop으로 검사를 할 때 마다 stack에서 값이 사라져서 계속 0,1을 벗어나지 못하고 도돌이표가 되었었다.... peek, pop 구분 꼭하자! ㅎㅎ

peek -> 헤드값을 확인
pop -> 헤드값을 확인 후 제거

0개의 댓글