프로그래밍/Algorithm

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

일단개그하다 2022. 11. 7. 23:34

문제

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

 

프로그래머스

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

programmers.co.kr

접근 방법 및 풀이

인수 arr에서 중복되는 숫자는 예측할 수 없으므로  ArrayList를 사용

arr의 숫자는 0에서 9 사이이므로 연속하는 숫자를 비교하기 위한 변수의 초기값은 -1로 설정

 

import java.util.ArrayList;
import java.util.List;

public class Q30_12906 {
    public int[] solution(int []arr) {
        int temp = -1;
        List<Integer> list = new ArrayList<>();
        for (int number : arr) {
            if (temp != number) {
                list.add(number);
                temp = number;
            }
        }
        return list.stream().mapToInt(item -> item).toArray();
    }
}

정확성 테스트와 효율성 테스트 모두 통과 하였으나 효율성 테스트가 평균 32ms 소요

 

public class Q30_12906 {
    public int[] solution(int []arr) {
        // 결과 배열의 길이 구하기
        int temp = -1;
        int size = 0;
        int arrLength = arr.length;
        for (int i = 0; i < arrLength; i++) {
            if (temp != arr[i]) {
                size++;
                temp = arr[i];
            }
        }

        // 연속하는 숫제를 제외한 숫자를 배열에 추가
        temp = -1;
        int index = 0;
        int[] answer = new int[size];
        for (int number : arr) {
            if (temp != number) {
                answer[index] = number;
                temp = number;
                index++;
            }
        }
        return answer;
    }
}

ArrayList를 배열로 개선하면서 int에서 Integer로 변환하는 부분을 제거 후 효율성 테스트는 평균 14ms로 개선