본문 바로가기

Algorithm/Programers - Java

[프로그래머스] 제일 작은 수 제거하기 / Stream

 

Level. 1

 

문제

 

풀이

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

      int[] answer = new int[arr.length-1];
      int minIdx=0;

      for(int i=1; i<arr.length ;i++){
          if(arr[minIdx]>arr[i]) minIdx = i;
      }
      
      for(int i=0;i<minIdx;i++){
          answer[i] = arr[i];
      }
      
      for(int i=minIdx+1 ;i<arr.length;i++){
          answer[i-1] = arr[i];
      }
      return answer;
  }
}

 

해결방법

  1.  배열의 크기가 1인 경우, 가장 작은 수를 제거하면 빈 배열이 되기 때문에 -1을 넣은 배열을 리턴한다.
  2.  주어진 배열보다 크기가 1 작은 정답배열을 만든다. 
  3.  반복문을 돌며 가장 작은 수의 index를 구한다.
  4.  반복문을 돌며 해당 정답배열에 해당 index값만 제외하고 값을 넣는다.

 


다른 사람 풀이

import java.util.Arrays;
import java.util.stream.Stream;
import java.util.List;
import java.util.ArrayList;

class Solution {
  public int[] solution(int[] arr) {
      if (arr.length <= 1) return new int[]{ -1 };
      int min = Arrays.stream(arr).min().getAsInt();
      return Arrays.stream(arr).filter(i -> i != min).toArray();
  }
}

Stream의 min()과 filter()를 사용해 짧은 줄로 정답을 얻을 수 있었다.