같은 숫자는 싫어 : Level1
https://school.programmers.co.kr/learn/courses/30/lessons/12906
처음 작성한 코드
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int[] answer = {};
ArrayList<Integer> al = new ArrayList<>();
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
continue;
} else {
al.add(arr[i]);
}
}
al.add(arr[arr.length - 1]);
answer = new int[al.size()];
for (int i = 0; i < al.size(); i++) {
answer[i] = al.get(i);
}
return answer;
}
}
두 번 째 작성한 코드 (리팩토링)
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int len = 1;
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] != arr[i]) {
arr[len++] = arr[i];
}
}
return Arrays.copyOf(arr, len);
}
}
=> ArrayList를 사용하는 대신 배열 내에서 중복을 제거하고 남은 길이를 유지하도록 변경했다.
=> Arrays.copyOf 메서드를 사용하여 중복 제거 후의 길이만큼의 배열을 생성하여 반환하도록 했다.
Arrays.copyOf (java.util.Arrays)
Arrays.copyOf는 주어진 배열의 일부분 또는 전체를 새로운 배열로 복사하는 메서드이다.
이 메서드를 사용하면 배열을 간단하게 복사하거나 크기를 조절하여 새로운 배열을 만들 수 있다.
Arrays.copyOf(arr, len)는 arr 배열의 첫 번째부터 len 길이까지의 요소를 새로운 배열로 복사한다.
이를 통해 중복을 제거하고 남은 요소들만을 갖는 새로운 배열을 만들어 반환하는데 사용된다.
예를 들어, 만약 arr이 [1, 2, 2, 3, 4]이고 len이 3이라면, Arrays.copyOf(arr, len)는 [1, 2, 2] 배열을 반환한다.
이는 arr 배열의 처음부터 3개의 요소를 새로운 배열로 복사했기 때문이다.
문제 : 정답은 처리되었지만, 개인적으로 리팩토링을 진행하고자 다시 풀었다.
해결 방법 : 불필요한 ArrayList를 사용하지 않고, 중복 제거 후의 길이를 바로 활용하여 배열을 생성하도록 했다.
깨달은 바 : 리팩토링을 잘 하도록 하자!!
'코딩테스트 > programming_JAVA' 카테고리의 다른 글
[Java] 프로그래머스_81301 : 숫자 문자열과 영단어 (0) | 2023.12.13 |
---|---|
[Java] 프로그래머스_68935 : 3진법 뒤집기 (2) | 2023.12.05 |
[Java] 프로그래머스_12940 : 최대공약수와 최소공배수 (0) | 2023.12.04 |
[Java] 프로그래머스_12943 : 콜라츠 추측 (0) | 2023.11.29 |
[Java] 프로그래머스_43163 : 단어 변환 (0) | 2023.11.24 |