Algorithm/Java

프로그래머스 - 같은 숫자는 싫어 java

고고마코드 2022. 6. 16. 10:21
반응형
12906번 문제

코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr


풀이

✔ 입력값으로 들어오는 배열에는 0~9 까지의 숫자만 들어올 수 있다.

✔ 앞의 수와 비교해서 중복된 값이 아닌 경우만 탐색한다.

 

  • 1번 풀이
public int[] solution(int[] arr) {
    List<Integer> list = new ArrayList<Integer>();
    int saveNum = -1;

    for (int a : arr) {
        if (saveNum != a) list.add(saveNum = a);
    }

    int[] newArr = new int[list.size()];
    for (int i = 0; i < newArr.length; i++) {
        newArr[i] = list.get(i);
    }

    return newArr;
}

배열을 순차대로 탐색하며 이전 값과 중복되지 않은 값만 list에 담아둡니다.

탐색이 끝난 후 list를 int array 로 변환 후 반환합니다.

 

✔ 테스트 케이스 실행 속도: 0.04ms

✔ 효율성 테스트: 23~26ms

 

  • 2번 풀이
public int[] solution(int[] arr) {
    List<Integer> list = new ArrayList<Integer>();
    int saveNum = -1;

    for (int a : arr) {
        if (saveNum != a) list.add(saveNum = a);
    }

    return list.stream().mapToInt(Integer::intValue).toArray();
}

list에 담는 부분은 1번 풀이와 반환할 때 stream을 활용하여 반환했습니다.

stream을 사용한 만큼 수행속도 측면에서는 효율성이 떨어집니다.

 

✔ 테스트 케이스 실행 속도: 1.5 ~ 2.5ms

✔ 효율성 테스트:  31~34ms

반응형