[PGS] 같은 숫자는 싫어 - JAVA

최영환·2023년 10월 8일
0

Programmers

목록 보기
40/43

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

1. 스택을 이용하지 않은 풀이

import java.util.*;

public class Solution {
    public List<Integer> solution(int []arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        
        int value = -1;
        for (int num: arr) {
            if (num != value) {
                value = num;
                answer.add(num);
            }
        }

        return answer;
    }
}

2. 스택을 이용한 풀이

import java.util.*;

public class Solution {
    public List<Integer> solution(int []arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        
        for (int num: arr) {
            if (stack.isEmpty() || stack.peek() != num) {
                stack.push(num);
                answer.add(num);
            }
        }

        return answer;
    }
}

📄 해설

접근

  • 스택을 이용하여 간단하게 해결 가능한 문제
  • 스택을 이용하지 않아도 해결이 가능한 문제이지만, 고득점 킷에서의 분류는 스택/큐 이므로 스택으로도 풀어봤다.
  • 효율성에 대한 결론만 말하면 스택을 이용한 풀이가 더 느리다.

과정

  • 배열 arr 을 순회하면서 이전 숫자의 값인 value 와 현재 숫자가 다르면 value 의 값을 현재 숫자로 바꾸고 answer 에 추가한다.

스택 풀이 과정

  • 배열 arr 을 순회하면서 스택이 비어있지 않고 스택의 탑이 현재 숫자와 다르다면 스택에 현재 숫자를 넣고 answer 리스트에 추가한다.
    • 숫자가 연속되지 않아야하므로 스택의 탑과 달라야한다.
profile
조금 느릴게요~

0개의 댓글