Languages/Java

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

효딩 2025. 4. 1. 12:44

 

배열 arr에서 연속적으로 나타나는 숫자를 하나만 남기고 제거해야 한다.

이때 제거된 후 남은 수들은 배열 arr의 원소들의 순서를 유지해야 한다.

 

처음에는 문제를 제대로 안 읽고

set을 사용해서 중복을 제거하려고 했지만,

연속적으로 나타나는 숫자를 하나로 남기는 문제이므로 set은 사용할 수 없음을 알았다.

 

그래서 생각한 방법은

앞에 숫자랑 비교해서 일치하지 않는 경우에만 list에 추가하고,

마지막에 list를 arr로 바꿔 출력하는 것이었다.

정확성 테스트, 효율성 테스트 모두 통과했다.

 

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++) {
            if (arr[i] != arr[i - 1]) {
                list.add(arr[i]);
            }
        }
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        // list.stream().mapToInt(i->i).toArray();
        return answer;
    }
}

 

구글링해보니 스택을 사용하는 방법도 있었다.

전체적인 플로우는 같았다.

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> stack = new Stack<>();
        
        for (int i : arr) {
            if (stack.isEmpty() || !stack.peek().equals(i)) {
            stack.push(i);
        }
        
        return stack.stream().mapToInt(i->i).toArray();
    }
}