본문 바로가기
코딩테스트/programming_JAVA

[Java] 프로그래머스_12906 : 같은 숫자는 싫어

by prometedor 2023. 12. 5.

같은 숫자는 싫어 : Level1

 

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

처음 작성한 코드

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를 사용하지 않고, 중복 제거 후의 길이를 바로 활용하여 배열을 생성하도록 했다.

깨달은 바 : 리팩토링을 잘 하도록 하자!!