728x90
🔗 문제 링크
📌 문제 개요
배열에서 연속으로 등장하는 같은 숫자를 제거하는 문제이다.
단순 중복 제거가 아니라 처럼 연속된 숫자만 제거해야 한다.
[1,1,3,3,0,1,1]
→ [1,3,0,1]
📌 접근 방법
현재 숫자와 직전에 저장된 숫자를 비교
직전 숫자와 같다면 추가하지 않고, 다르면 Stack에 저장하는 방식으로 해결
📌 핵심 아이디어
핵심은 마지막으로 저장된 값만 비교하면 된다는 점
stack.peek()
Stack의 가장 위(마지막 값)를 조회할 수 있다.
현재 숫자와 마지막 값이 다를 때만 push 하면 연속 중복 제거가 가능하다.
📌 전체 코드
package level1;
import java.util.Stack;
public class No32 {
public static void main(String[] args) {
int[] arr = {4,4,4,3,3};
Stack<Integer> stack = new Stack<>();
for(int num : arr){
// 스택이 비어있거나 마지막 값과 다를 때만 저장
if(stack.size() == 0 || stack.peek() != num){
stack.push(num);
}
}
System.out.println(stack.toString());
}
}
📄 정리
이 문제는 전체 중복 제거가 아니라 연속 중복 제거라는 점이 중요했다.
따라서 현재 값과 이전 값만 비교하면 해결 가능하며, Stack의 peek()를 사용하면 쉽게 구현할 수 있다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 최대공약수와 최소공배수 JAVA 풀이 (유클리드호제법, 시간복잡도) (0) | 2026.05.18 |
|---|---|
| 프로그래머스 크기가 작은 부분문자열 JAVA 풀이 (문자열, substring, 시간복잡도) (0) | 2026.05.17 |
| 프로그래머스 행렬의 덧셈 JAVA 풀이 (2차원배열, 구현) (0) | 2026.05.14 |
| 프로그래머스 문자열 다루기 기본 JAVA 풀이 (문자열, 구현) (0) | 2026.05.14 |
| 프로그래머스 문자열 내림차순으로 배치하기 JAVA 풀이 (문자열) (0) | 2026.05.13 |