알고리즘 & 자료구조/스택
[프로그래머스 알고리즘 고득점 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;
}
}
추측컨데 프로그래머스 채점이
순서가 보장된 선형적 자료구조라면 다 통하는 것 같다.