본문 바로가기
코테/프로그래머스

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

by gayoungeeda 2023. 7. 7.
728x90

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

 

문제 설명


문제 풀이

import java.util.*;

public class Solution {
   public int[] solution(int []arr) {
    	int[] answer = {};
    	int n = 0;
        Set<Integer> set = new HashSet<>();
        List<Integer> list = new LinkedList<>();
        
        for (int i : arr) {
			set.add(i);
		}
        
        set.clear();
        
        for (int i = 0; i < arr.length; i++) {
			set.add(arr[i]);
			if (set.size() == 2) {
				list.add(arr[--i]);
				set.clear();
			}
			else if (set.size() < 2 && i == arr.length - 1) {
				list.add(arr[i]);
			}
		}
        answer = new int[list.size()];
        for (Integer i : list) {
			answer[n++] = i;
		}

        return answer;
    }
}

처음 풀이는 Set에 숫자를 넣어 중복을 없애고 set의 사이즈가 2가 되면(중복이 아닌 숫자가 들어오면) 리스트에 추가, set을 비우는 방식으로 풀었더니 답은 나오는데 효율성 검사에서 실패했다.

 

import java.util.*;

public class Solution {
   public int[] solution(int []arr) {
    	int[] answer = {};
    	int n = 0;
    	List<Integer> list = new LinkedList<>();
    	
        list.add(arr[0]);
    	for (int i = 1; i < arr.length; i++) {
			if (arr[i] != arr[i-1]) {
				list.add(arr[i]);
			}
		}
    	
    	answer = new int[list.size()];
    	
    	for (Integer i : list) {
			answer[n++] = i;
		}

        return answer;
    }
}

set을 이용하지 않고 비슷한 방식으로 다시 풀었더니 통과..