알고리즘 & 자료구조/스택

[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 같은 숫자는 싫어

수수다 2026. 2. 21. 19:19

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1. 정답 풀이

스택과 큐 항목에 들어있지만 그냥 리스트로 하나씩 비교하면 된다고 생각해서 그렇게 구현함

정답은 배열하나씩 비교하면서 넣기 때문에 그 크기를 처음부터 정할 수 없기때문에 

동적배열인 ArraList를 사용했지만 return은 int[] 배열로 달라하니...
리스트를 int배열로 바꿀 수 밖에 없었다.

toArray와 같은 메서드를 쓰고 싶었지만 반환이 Integer[] 이라서 기각.
프로그래머스 아직 적응하려면 멀었다.

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(arr[0]);
        for(int i=1; i<arr.length; i++){
            int cur = list.get(list.size()-1);
            if(cur == arr[i]) continue;
            
            list.add(arr[i]);
        }
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }

        return answer;
    }
}

 

맞긴했지만 두가지를 다시 고민해봐야겠다.

스택/큐를 어떻게 활용할 수 있는지와

return을 다른 사람들은 어떻게 했는지.

-> 스택을 쓴다면
하나씩 넣다가 탑과 비교해서 넣을 지 말 지를 정하는 방법 
리스트 풀이랑 비슷함

 

-> return 타입
많은 사람들이 나처럼 리스트를 쓰고 배열로 바꾸는 과정을 추가했다.

하지만...
바꿔도 된다니... 
ArrayList<Integer> 로 반환타입을 바꿔도 되고

import java.util.*;

public class Solution {
    public ArrayList<Integer> solution(int []arr) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(arr[0]);
        for(int i=1; i<arr.length; i++){
            int cur = list.get(list.size()-1);
            if(cur == arr[i]) continue;
            
            list.add(arr[i]);
        }

        return list;
    }
}


Stack<Integer> 로 바꿔도 된다...

import java.util.*;

public class Solution {
    public Stack<Integer> solution(int []arr) {
        Stack<Integer> stack = new Stack<>();
        stack.add(arr[0]);
        for(int n : arr) {
            if(stack.peek() != n) {
                stack.add(n);
            }
        }

        return stack;
    }
}


추측컨데 프로그래머스 채점이
순서가 보장된 선형적 자료구조라면 다 통하는 것 같다.