본문 바로가기
알고리즘/프로그래머스

(LEVEL 1)프로그래머스 - 같은 숫자는 싫어(JAVA)

by 꾸준함 2023. 1. 30.

문제


입출력 예


풀이.

 

1. 값을 담을 Stack을 2개 선언한다.

2. 첫 Stack에 arr의 첫번째 값을 넣어두고 인덱스 1부터 길이만큼 반복문을 돈다.

   >> 반복문을 돌며 stk에 제일 위에있는 값이 현재 값(arr[i]) 과 같지 않을때만 값을 추가.

3. size에 현재 stk의 size를 저장해놓음

4. 값을 반환할 answer의 크기를 size만큼 선언

5. size크기 만큼 반복문을 돌며 stk에 저장된 값들을 하나씩 두번째 스택인 temp에 저장

6. temp저장된 값들을 다시 하나씩 answer에 저장

 

-->

스택을 두개 만들어서 진행한 이유는 스택은 LIFO의 특성을 가지고있어 stk에 저장된 값을 꺼낼시 순서가 반대로 되어 한번더 스택에 진행하였음.

풀기는 했으나 풀이 방법이 효율적이지 못한것 같고, 다른방법이 있을거 같으므로 찾아볼 예정

 


코드

import java.util.*;

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