[Java 알고리즘] 제일 작은 수 제거하기, 프로그래머스 level1

제일 작은 수 제거하기
문제 설명


정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

제한 조건

arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

입출력 예
arr return
[4,3,2,1] [4,3,2] 
[10] [-1]

 

나의 풀이
import java.util.*;
class Solution {
  public int[] solution(int[] arr) {
      int[] answer = {};
	      int min = arr[0];
	      if(arr.length==1){
	          return new int[]{-1};
	      }
	      for(int i =0; i<arr.length; i++){
	          min = Math.min(arr[i],min);
	      }
	      answer = new int[arr.length-1];
	      
	      int j =0;
	      for(int i =0; i<answer.length; i++){
	          if(arr[j] == min){
	              j++;
	              i--;
	              continue;
	          }
	          answer[i] = arr[j];
	          j++;
	      }
	      return answer;
  }
}

- 배열이 빌 경우는 length가 1인 배열. -> 그냥 -1 담아서 리턴

- arr와 answer는 길이가 1차이.

- 루프 돌때 다른 루프변수를 이용해야함.

- arr[j]가 최소값과 같은 경우는 answer에 넣어주지 말아야함.

 

다른사람의 풀이
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();
  }
}

- 스트림을 이용

- 길이가 1이면 바로 {-1} 담아서 리턴하는 건 동일

- 배열을 스트림으로 생성해서 최소값을 구함.

- 배열을 스트림으로 다시 생성해서 filter() 메소드로 최소값인 것만 제외하여 스트림을 반환한후 toArray() 메소드로 배열로 다시 반환.

- 단점 : 스트림이라는게 내부반복자를 사용하기 때문에 개발자의 코드는 줄어들지만 성능적으로 순수 코드보다 더 오랜 시간이 걸릴 수 있음.

댓글

Designed by JB FACTORY