본문 바로가기

프로그래머스

Lv1 같은 숫자는 싫어

문제요약

배열 arr가 주어진다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져있다. 이때 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거한다. 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 한다. 

 

입출력 예

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

 

 

문제풀이

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        Stack<Integer> stack = new Stack<>();
        
        for(int i=0; i<arr.length; i++){
            if(stack.size() == 0 || arr[i] != stack.peek()){ 
                   stack.push(arr[i]);
            }
        }
        
        answer = new int[stack.size()];
        for(int i=0; i<stack.size(); i++){
            answer[i] = stack.get(i);
        }
        
        return answer;
    }
}

 

스택을 사용해서 문제를 풀어봤다.

스택 후입선출 방식을 활용한다. 

stack.peak()는 가장 마지막에 넣은 값을 반환한다.

stack.push()는 스택에 데이터를 넣는다.

연속된 숫자를 확인하기 위해 스택에 마지막에 들어간 값과 새로 넣을 값을 비교해서 연속된 숫자를 확인한다.