알고리즘/Java

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

유리코딩 2021. 11. 12. 23:10
반응형

알고리즘

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


 

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12935

 

 

2. 풀이

썩 효율적인 방법이라 생각이 들지 않지만 풀 수만 있다면..

class Solution {
    public int[] solution(int[] arr) {
		// 숫자가 1개인 배열은 -1 return
        if(arr.length == 1) {
            int[] answer = new int[] {-1};
            return answer;
        }

        int[] answer = new int[arr.length-1];
        int min = 0;
        
        //
        for (int i = 0; i < arr.length; i++) {
            if(arr[min] > arr[i]) min = i;
        }
        
        // arr[0]부터 다시 숫자채우기
        for(int i=min+1;i<arr.length;i++){
            arr[i-1] = arr[i];
        }
        for(int i=0;i<answer.length;i++){
            answer[i] = arr[i];
        } 
        return answer;
    }
}

 

[다른사람의 풀이 1]

Arrays.sort로 정렬하고, ArrayList를 이용하여 푸는 방법.

import java.util.ArrayList;
import java.util.Arrays;

public class solution {

	public int[] solution(int[] arr) {
		// sort를 이용해서 최솟값 가져오기    
		int[] temp = arr.clone();
		Arrays.sort(temp);
		int min = temp[0];
		//ArrayList를 이용하여 최솟값과 같지 않은 수만 추가
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i < arr.length; i++) {
			if(arr[i] != min) {
				list.add(arr[i]);
			}
		}
		
		int[] answer;
		// 경우를 나눠서 배열에 값을 저장하기		
		if(list.size() == 0) {
			answer = new int[1];
			answer[0] = -1;
		} else {
			answer = new int[list.size()];
			for (int i = 0; i < list.size(); i++) {
				answer[i] = list.get(i);
			}
		}
		
        return answer;        
    }
}

 

[다른사람의 풀이2]

ArrayList를 이용하여 풀었고, Collections.min()을 이용하여 최소값을 찾음

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

class Solution {
  public int[] solution(int[] arr) {
    int[] answer = {};

    if (arr.length == 1) {
      answer = new int[]{-1};
    } else {
      List<Integer> list = new ArrayList<>();
      for (int a : arr)
        list.add(a);
      list.remove(Collections.min(list));
      answer = new int[arr.length - 1];
      for (int i = 0; i < list.size(); i++)
        answer[i] = list.get(i);
    }
    return answer;
  }
}
반응형