✏️오늘의 문제
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를 반환합니다.