[알고리즘] 같은 숫자는 싫어

MSK·2022년 6월 17일
0

같은 숫자는 싫어
https://programmers.co.kr/learn/courses/30/lessons/12906

원래 답안

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

public class Duplicate {
    public int[] solution(int []arr) {
        int[] answer = {};

        arr = Arrays.copyOf(arr, arr.length + 1);

        ArrayList<Integer> ans = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if(i+1<arr.length && arr[i] != arr[i+1]){
                ans.add(arr[i]);
            }
        }

        answer = ans.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();

        return answer;
    }
}

바꾼 답안

import java.util.ArrayList;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};

        ArrayList<Integer> ans = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if(i == 0){
                ans.add(arr[i]);
            }else {
                if (arr[i] != arr[i - 1]) {
                    ans.add(arr[i]);
                }
            }
        }

        answer = ans.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();

        return answer;
    }
}

error: 17번 테스트에서 불통이 됨

원인:

arr = Arrays.copyOf(arr, arr.length + 1); 

배열을 한자리 추가하고 그곳에 null값을 추가하는 식.
17번 테스트에서 주어진 값이 맨 마지막 값에 Null이 들어가는 값으로 추정됨.

해결: arr을 늘리지 않고, 첫 번째 값을 무조건 넣은 후 arr[i]의 앞자리와 비교해서 배열에 삽입함

다른 해결

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

public class Duplicate {
    public int[] solution(int []arr) {
        int[] answer = {};

        int N = arr.length;
        arr = Arrays.copyOf(arr, N + 1);
        arr[N] = 10;

        ArrayList<Integer> ans = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if(i+1<arr.length && arr[i] != arr[i+1]){
                ans.add(arr[i]);
            }
        }

        answer = ans.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();

        return answer;
    }
}
int N = arr.length;
        arr = Arrays.copyOf(arr, N + 1);
        arr[N] = 10;

으로 추가된 배열의 맨 마지막 값을 null이 아닌 0-9 값과 관계없는 값을 넣어준다.

profile
여긴어디나는누구

0개의 댓글