✏️오늘의 문제
public int[] solution(int []arr) {
int j=0;
for(int i =1; i<arr.length; i++){
if(arr[j]==arr[i]){
arr[j]= 10;
}
j++;
}
int count = (int)Arrays.stream(arr).filter(e -> e!=-1).count();
int[] answer = new int[count];
j=0;
for(int i=0 ; i<arr.length; i++){
if(arr[i]!=10){
answer[j] = arr[i];
j++;
}
}
return answer;
}
이 코드에는 문제점이 있습니다.
인덱스 초과 문제
j++
가 반복문에서 매번 증가하기 때문에, j
가 arr.length
에 도달할 경우 인덱스 초과 오류가 발생할 수 있습니다. j
는 중복되지 않은 값의 인덱스를 관리해야 하므로, 중복된 값이 아닐 때만 증가해야 합니다.필터링 로직
반환 값의 정확성
public int[] solution(int[] arr) {
if (arr.length == 0) return new int[0]; // 빈 배열 처리
int[] temp = new int[arr.length];
int j = 0;
for (int i = 0; i < arr.length; i++) {
// 첫 번째 값 또는 이전 값과 다를 경우에만 추가
if (i == 0 || arr[i] != arr[i - 1]) {
temp[j] = arr[i];
j++;
}
}
return Arrays.copyOf(temp, j); // 유효한 부분만 복사하여 반환
}
이 코드는 중복된 값을 제거하고 새로운 배열을 생성하여 반환합니다. temp
배열을 사용하여 중복이 아닌 값을 저장하고, 최종적으로 필요한 크기만큼 복사하여 반환합니다.
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;
}
}
ArrayList 선언
tempList
라는 ArrayList
를 생성하여 중복되지 않은 값을 저장합니다.이전 숫자 초기화
preNum
변수를 초기화하여, 비교할 기준이 되는 값을 설정합니다.중복 제거 로직
arr
를 순회하며, 현재 숫자 num
이 이전 숫자 preNum
과 다를 때만 tempList
에 추가합니다.preNum
을 현재 숫자로 업데이트하여 다음 반복에서 비교합니다.결과 배열 생성
tempList
의 크기를 기반으로 새로운 정수형 배열 answer
를 생성합니다.tempList
의 각 요소를 answer
배열에 복사합니다.결과 반환
이 알고리즘은 간단하면서도 효과적으로 연속된 중복 값을 제거할 수 있습니다. Java의 ArrayList
를 활용하여 동적으로 중복되지 않은 값을 저장하고, 최종적으로 배열로 반환하는 방식으로 구현되었습니다. 이를 통해 여러분의 데이터 처리 과정에서 중복 제거가 필요할 때 유용하게 사용할 수 있습니다.
public ArrayList<Integer>solution(int []arr) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
int preNum = 10;
for(int num : arr) {
if(preNum != num)
tempList.add(num);
preNum = num;
}
return tempList;
}
ArrayList 선언
tempList
라는 이름의 ArrayList
를 생성합니다. 이 리스트는 중복되지 않은 값을 저장하는 데 사용됩니다.이전 숫자 초기화
preNum
변수를 초기화하여 비교할 기준이 되는 값을 설정합니다. 이 예제에서는 10으로 초기화하였으며, 이는 배열의 요소와 겹치지 않는 값입니다.중복 제거 로직
for-each
루프를 사용하여 arr
배열의 각 요소를 순회합니다.num
이 이전 요소 preNum
과 다를 경우, 즉 연속된 중복이 아닐 경우 tempList
에 num
을 추가합니다.preNum
을 현재 num
으로 업데이트하여 다음 반복에서 비교할 수 있도록 합니다.결과 반환
tempList
를 반환합니다.