본문 바로가기
알고리즘/코딩 - 프로그래머스

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

by 주남2 2019. 4. 12.
반응형

문제 설명

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

 

제한 조건

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

생각

문제 자체는 어렵지 않지만, 최대한 제한 조건과 원하는 바를 잘 파악하여 효율적인 코드를 만들어야 한다.

[10] 이면 -1을 리턴한다. 이것은 원소가 하나만 있다면 그 원소를 제거하기 때문에 빈 배열이 생겨 -1이 나오는 것이다. 그렇다면 이를 맨 처음에 체크를 해줘서 원래 배열의 길이가 1이라면 -1을 리턴해서 바로 나와버리게 하여, 뒤 쪽의 계산을 하지 않도록 만들어야 할 것이다.

두 번째로, 제한 조건에서 보면 각 원소들은 겹치지 않는다. 그러므로 제일 작은 수는 1개라는 것이다. 이것을 이용하여 가장 작은 값이 제거 되면, 나머지 원소들은 제거할 필요 없이 그 원소만 제거하면 될 것이다.

 

최솟값을 찾기위해서 min 변수를 만들어 for문을 돌면서 만들어도 되지만, Collections 을 이용하였다. 또한 for문을 돌며 min과 원소값이 일치할 때 제거하는 것 대신 indexOf를 이용하여 index를 구하고 바로 접근을 하여 제거하는 방법을 사용하였다. (귀찮아서는 아니고 그냥 그 방법이 먼저 생각났다..)

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.*;
 
class Solution {
      public int[] solution(int[] arr) {
          int[] answer = {};
          ArrayList<Integer> arr2 = new ArrayList<Integer>();
        
        if(arr.length <=1) {
            return new int[] {-1};
        }
          
          for(int i=0; i<arr.length; i++) {
              arr2.add(arr[i]);
          }
          
          int min = Collections.min(arr2);
          
          int index_of_min = arr2.indexOf(min);
          
          arr2.remove(index_of_min);
          
          
          answer = new int[arr2.size()];
          
          for(int i=0; i<arr2.size(); i++) {
              answer[i] = arr2.get(i);
          }
          
          return answer;
      }
    }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

 

반응형