[프로그래머스] 같은 숫자는 싫어 (Lv.1, Java)

양현승·2023년 8월 30일

알고리즘

목록 보기
5/9

💡 문제

문제설명

🤔 고민사항

  • 전형적인 스택 또는 큐를 사용하면 되는 간단한 문제였다.
  • 사실 프로그래머스에 익숙하지 않아, '정답 배열에 값을 어떻게 추가하지???' 라는 굉장히 초보적이고 부끄러운 고민을 잠시 했다.
    (백준이나 코드트리였으면 정답 배열을 반환하는게 아니라 그냥 찍어내면 됐으니까)
  • 어쨌든, 파라메터로 주어진 배열에서 중복된 숫자를 제거하여 반환하면 되는 문제다.
    주의해야할 요소는 '주어진 배열의 순서'를 지켜야 한다는 것. 스택이던 큐던 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;
    }
}```
profile
기록의 필요성을 느끼고 시작한 곳입니다. 혼잣말 하는것 같아 재밌네요!

0개의 댓글