알고리즘

프로그래머스_제일 작은 수 제거하기 (java)

lamp_jiny 2020. 9. 7. 15:48

원본 문제https://programmers.co.kr/learn/courses/30/lessons/12935

  • 정수가 저장된 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수 만들기
  • 빈 배열이면 -1을 반환
  • 제한조건 : arr은 길이 1이상인 배열, 인덱스 i,j에 대해 i 가j와 같지 않다면 arr[i]도 arr[j]와 같지 않다.
class Solution {
	public int[] solution(int[] arr) {
        int[] answer = {};
        List<Integer> arr2 = new ArrayList<Integer>(); // 배열에서 바로 삭제가 안됨으로 arraylist생성
		
        // 원소가 1개이하면 무조건 가장 작은 수 이므로 제거된다 -> -1을 리턴
        if(arr.length <= 1) { 
            answer = new int[] {-1};
            return answer;
        }

        for(int i=0; i<arr.length; i++) { // 배열원소를 arrayList에 넣어줌
            arr2.add(arr[i]);
        }

        int min = 0; // 가장 작은 원소의 인덱스, 처음에는 무조건 첫 번째 인덱스가 작다고 가정
        for(int i=1; i<arr.length; i++) {
            if(arr[min] > arr[i]) {
                min = i; // min에 가장 작은 값의 인덱스를 넣어줌
            }
        }
        arr2.remove(min); // 해당 인덱스를 가진 원소를 제거
        answer = new int[arr2.size()];

        for(int i=0; i<arr2.size(); i++) { // 다시 배열에 넣어줌
            answer[i] = arr2.get(i);
        }
        return answer;
    }
}

나는 원소 비교 후 가장 작은 값의 인덱스를 저장해 해당 인덱스의 값을 제거하는 방식으로 구현하였다. 그리고 배열에서 바로 삭제하는 메소드가 없어, arrayList를 만들어 옮긴 후 삭제하고 다시 배열에 담았다. 

추가적으로 생각해보니 정렬 알고즘을 써서 오름차순 정렬 후 가장 첫 인덱스의 값을 지우거나 뒤에 원소를 앞으로 밀어 return해도 될 것 같다.

 

다른 블로그들을 찾아보니 collection을 사용해서 풀이하는 방법도 있었다.