Algorithm/Java

프로그래머스 - 제일 작은 수 제거하기 java

고고마코드 2021. 12. 22. 10:24
반응형

문제 링크 - 12935

코딩테스트 연습 - 제일 작은 수 제거하기 | 프로그래머스 (programmers.co.kr)


문제 이해하기

배열을 순서대로 탐색하며 가장 작은 수를 찾아서 해당 수만 제거하고 새로운 배열에 담으면 되겠다.

배열이 빈 경우에는 -1 리턴이므로 입력 배열의 길이가 1이면 바로 -1 을 리턴하면 되겠다.


문제 풀이

1번 풀이

public int[] solution(int[] arr) {        
    if(arr.length == 1) return new int[] {-1};

    // 순서대로 탐색하며 가장 작은 수 찾기
    int min = Integer.MAX_VALUE;
    for(int a : arr) {
        if(min > a) min = a;
    }

    // 위에서 찾은 가장 작은 수를 제외하고 새로운 배열 만들기
    int[] newArr = new int[arr.length-1];
    int index = 0;
    for(int a : arr) {
        if(min != a) newArr[index++] = a;
    }

    return newArr;
}
  • 입력 배열의 크기가 1인 경우 바로 [1] 리턴

  • 가장 작은 수를 찾기 위해 변수:min 을 초기화하고 순서대로 탐색하며 더 작은 수를 찾으면 min을 해당 인덱스번호로 수정한다.

  • 이렇게 찾은 가장 작은 수의 인덱스번호(min)을 제외한 다른 수를 새로운 배열에 담는다.


2번 풀이

public int[] solution(int[] arr) {
    if(arr.length <= 1) return new int[] {-1};

    // 배열을 리스트로 변환하면서 가장 작은 수 찾기
    int min = Integer.MAX_VALUE;
    List<Integer> list = new ArrayList<Integer>();
    for(int i=0; i<arr.length; i++) {
        list.add(arr[i]);
        if(min > arr[i]) min = arr[i];
    }

    // 가장 작은 수 제거 후 리스트를 새로운 배열로 변환
    list.remove(list.indexOf(min));
    int[] newArr = new int[list.size()];
    for(int i=0; i<newArr.length; i++) newArr[i] = list.get(i);

    return newArr;
}
  • 배열을 순서대로 탐색하며 리스트에 담는다. 이 때 가장 작은 수를 찾아 min 에 저장해둔다.

  • 가작 작은 수를 제거 후 리스트를 배열로 변환해 반환한다.


3번 풀이

public int[] solution(int[] arr) {        
    if(arr.length == 1) return new int[] {-1};

    int min = IntStream.of(arr).min().getAsInt();
    return IntStream.of(arr).filter(i -> i != min).toArray();
}
  • 스트림을 활용한 풀이

  • min() 메소드를 통해 가장 작은 수를 찾는다.

  • filter() 를 통해 가장 작은 수를 제외한 나머지를 탐색한다.


반응형