프로그래머스 같은 숫자는 싫어

최준호·2021년 7월 20일
0

algorithm

목록 보기
24/39

문제

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

풀이

public class HateSameNumber {
    public static void main(String[] args) {
        HateSameNumber hsn = new HateSameNumber();
        int[] arr = {1,1,3,3,0,1,1};
        int[] solution = hsn.solution(arr);
        for (int i : solution) {
            System.out.println("i = " + i);
        }
    }
    public int[] solution(int []arr) {
        //숫자를 넣어둘 stack
        Stack<Integer> stack = new Stack<>();
        List<Integer> basket = new LinkedList<>();

        for(int i : arr){
            if(!stack.isEmpty()){
                int stackSu = stack.peek();
                if(stackSu!=i){
                    stack.push(i);
                    basket.add(i);
                }
            }else{
                stack.push(i);
                basket.add(i);
            }
        }
        int[] answer = new int[basket.size()];
        int idx = 0;
        for(int i : basket){
            answer[idx++] = i;
        }

        return answer;
    }
}

나는 마지막 숫자를 확인하기 위해 Stack을 사용했다... 그런데 풀이를 보니 LinkedList의 경우 .getLast와 같은 메서드가 있어서 값을 가져올 수 있더라... 맨날 ArrayList만 써서 없는 줄 알았지 ㅜㅜ 그래도 LinkedList에 대해 더 공부해야겠다고 느꼈고 위 코드도 나쁘게 푼 코드는 아니여서 이대로 풀이로 올려놓았다.

LinkedList의 경우 넣는 순서대로 들어가 있기 때문에 .getLast(), .getFirst()와 같은 메서드들로 배열의 값을 가져올 수 있음!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글