오늘의 학습 키워드
공부한 내용 본인의 언어로 정리하기
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> unique = new ArrayList<>(); //중복제거완료 목록
//첫번째 항목 추가
unique.add(arr[0]);
//이전 개체와 비교하여 다를경우 unique 리스트에 추가
for(int i =1; i < arr.length; i++)
if(arr[i] != arr[i-1]){
unique.add(arr[i]);
}
//배열로 반환하기 위한 새 배열 객체 생성
int[] answer = new int[unique.size()];
//리스트의 값을 배열로 전환
for(int i = 0; i < unique.size(); i++){
answer[i] = unique.get(i);
}
return answer;
}
}
오늘의 회고
오늘의 문제는 어제 풀었던 "폰켓몬" 문제와 유사한 점이 아주 많았다.
어제 이미 중복된 개체를 제거하는데 사용된 코드를 똑같이 사용하면 되겠다고 생각해 진행했다.
어제와는 다르게 원래 있던 배열의 순서에서 중복된 개체만 제거해서 반환을 해야했기 때문에 오름차순 정렬은 제외하였다.
List<Integer> unique = new ArrayList<>(); //중복제거완료 목록
unique.add(arr[0]); //첫번째 항목 추가
for(int i =1; i < arr.length; i++) { //이전 개체와 비교하여 다를경우 unique 리스트에 추가
if(arr[i] != arr[i-1]){
unique.add(arr[i]);
}
}
이후 unique
리스트를 그대로 반환하려고 했더니 List
가 int[]
로 변환되지 않았다는 오류가 있었다.
그래서 List
를 배열로 변환하는 작업이 필요했다.
int[] answer = new int[unique.size()]; //배열로 반환하기 위한 새 배열 객체 생성
for(int i = 0; i < unique.size(); i++){ //리스트의 값을 배열로 전환
answer[i] = unique.get(i);
}
마지막 배열을 반환해주면 완성된다.
return answer;
AI 코드리뷰
Java 솔루션 코드 리뷰: 연속 중복 제거
전반적인 평가
장점:
개선 가능한 부분:
import java.util.*;
import java.util.stream.IntStream;
public class Solution {
public int[] solution(int[] arr) {
if (arr == null || arr.length == 0) {
return new int[0];
}
return IntStream.range(0, arr.length)
.filter(i -> i == 0 || arr[i] != arr[i-1])
.map(i -> arr[i])
.toArray();
}
}
개선된 버전의 장점:
원래의 코드도 문제를 잘 해결하고 있지만, 위에서 제안한 개선 사항들을 적용하면 더 견고하고 현대적인 Java 코드가 될 것입니다. 전반적으로 잘 작성된 코드입니다.
내일 공부할 것 :
AI의 말처럼 견고하고 현대적인 코드를 이용하기 위해서 Stream API를 사용하는 방법을 알아야겠다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12906