코딩테스트

[프로그래머스 / lv 1] 같은 숫자는 싫어 (JAVA_해시)

lyndaa 2023. 3. 19. 14:38

문제


풀이방법

  • List
    • 스택
  • Stack
    • arr의 크기만큼 반복하면서 스택에 마지막으로 들어간 숫자를 확인(peek)하여 다르다면 추가(push)한다.
      • 스택의 사이즈가 0일 경우에는 반드시 추가 필요
    • 스택의 크기만큼 answer 배열을 생성한다.
    • 스택의 값을 가져와(pop) answer 배열의 마지막 index부터 값을 넣는다. 
      • 스택은 후입선출 구조이기 때문

코드

👇🏻 List

public int[] solution(int[] arr) {
        List<Integer> answer = new ArrayList<>();
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] != arr[i + 1]) {
                answer.add(arr[i]);
            }
        }
        answer.add(arr[arr.length-1]);
        return answer.stream().mapToInt(i->i).toArray();
    }

👇🏻 Stack

public int[] solution2(int[] arr) {
        Stack<Integer> s = new Stack<>();
        for (int i = 0; i < arr.length; i++) {
            if (s.size()==0 || arr[i] != s.peek()) {
                s.push(arr[i]);
            }
        }
        int[] answer = new int[s.size()];
        for(int i=s.size()-1; i>=0; i--){
            answer[i] = s.pop();
        }
        return answer;
    }