알고리즘

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

Heidong 2022. 6. 14. 13:49
반응형

 

내 풀이

public int[] solution(int []arr) {

		List<Integer> ans = new ArrayList<>();
		for(int x : arr) {
			ans.add(x);
		}
		
		int cnt = 0;
		while(cnt < ans.size()) {
			if((cnt+1) == ans.size()) break;

			if(ans.get(cnt) == ans.get(cnt + 1)) {
				ans.remove(cnt);
				cnt = 0;
				continue;
			}
			cnt++;
		}

        return ans.stream().mapToInt(x -> x).toArray();
    }

코드는 조건에 맞게 작동을 하지만 효율성 테스트에서 실패가 나왔다.

알아본 결과 배열에서 삭제 방식으로 푸는 것은 좋지 않다고 한다.

그래서 배열에 추가하는 방식으로 다시 풀어 보았다.

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class P_29 {

	public int[] solution(int []arr) {

		List<Integer> ans = new ArrayList<>();
		int cnt = 0;

		ans.add(arr[0]);

		for(int i = 0; i<arr.length; i++) {
			if(i+1 == arr.length) break;

			if(ans.get(cnt) == arr[i+1]) {
				continue;
			}
			ans.add(arr[i+1]);
			cnt++;
		}

		return ans.stream().mapToInt(x -> x).toArray();
    }

	public static void main(String[] args) {
		// 같은 숫자는 싫어
		P_29 p = new P_29();
		int[]arr = {4,4,4,3,3};
		int[]ans = p.solution(arr);
		System.out.println(Arrays.toString(ans));
	}

}

추가 방식으로 하면서 for문 하나로 해결이 가능했다.

 

 

다른 사람 풀이

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preNum = 10;
        for(int num : arr) {
            if(preNum != num)
                tempList.add(num);
            preNum = num;
        }       
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i).intValue();
        }
        return answer;
    }
}

intValue() 메소드를 사용하는 이유는 Integer 값의 반환을 int로 바꾸기 위함.

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(arr[0]);

        for (int i = 1; i < arr.length; i++) {

            if (arr[i] != arr[i - 1])
                list.add(arr[i]);
        }

        int[] answer = new int[list.size()];

        for (int i = 0; i < list.size(); i++)
            answer[i] = list.get(i);

        return answer;
    }
}

 

반응형