반응형
문제 설명
정수를 저장한 배열, 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
|
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
|
반응형
'알고리즘 > 코딩 - 프로그래머스' 카테고리의 다른 글
[Java][프로그래머스][Level 1] 콜라츠 추측 (2) | 2019.05.01 |
---|---|
[Java][프로그래머스][Level 1] 최대공약수와 최소공배수 (1) | 2019.04.30 |
[Java][프로그래머스][Level 1] 정수 내림차순으로 배치하기 (0) | 2019.04.11 |
[Java][프로그래머스][Level 1] 자연수 뒤집어 배열로 만들기 (0) | 2019.04.09 |
[Java][프로그래머스][Level 1] 자릿수 더하기 (0) | 2019.04.07 |