같은 숫자는 싫어
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 값과 관계없는 값을 넣어준다.