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

Elmo·2022년 8월 19일
0

🔔 같은 숫자는 싫어

https://school.programmers.co.kr/learn/courses/30/lessons/12906

단순 중복 제거가 아닌 연속 중복 제거라는 것을 잊지말자

list를 사용할 경우 for문에서 인덱스를 이용해 이전 숫자와 비교할 경우 문제 발생함. 이럴 때는 while문을 비교하는 것이 나음

이전 숫자를 담는 변수로 비교하는 것이 편함

스택을 사용할 수 있음

🔑 java 풀이1

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        
        ArrayList<Integer> list = new ArrayList<>();
        int past=-1; //이전 숫자
        for(int i=0; i<arr.length; i++){
            if(i>0){
                if(past!=arr[i])//이전 숫자와 비교
                    list.add(arr[i]);
            }
            else
                list.add(arr[i]);
            past=arr[i];
        }
        int answer[] = new int[list.size()];
        int k=0;
        for(int i : list)
            answer[k++]=i;
        return answer;
    }
}

🔑 java 풀이2(스택/큐 사용)

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> stack = new Stack<>();
        
        for(int i=0; i<arr.length; i++){
            if(!stack.empty()){//스택이 비어있지 않으면
                if(stack.peek()!=arr[i])//이전 숫자와 다르면
                    stack.push(arr[i]);//스택에 push
            }
            else//스택에 아무것도 없으면
                stack.push(arr[i]);//그냥 바로 push
        }
        int answer[]=new int[stack.size()];
        for(int i=stack.size()-1; i>=0; i--)
            answer[i] = stack.pop();
		//스택은 pop하면 선입후출이므로 역순서로 배열에 넣는다.
        return answer;
    }
}

profile
엘모는 즐거워

0개의 댓글