[Java 알고리즘] 제일 작은 수 제거하기, 프로그래머스 level1
- 알고리즘 문제/[Java] 알고리즘
- 2019. 9. 18. 00:50
제일 작은 수 제거하기
문제 설명
정수를 저장한 배열, 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() 메소드로 배열로 다시 반환.
- 단점 : 스트림이라는게 내부반복자를 사용하기 때문에 개발자의 코드는 줄어들지만 성능적으로 순수 코드보다 더 오랜 시간이 걸릴 수 있음.
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
[Java 알고리즘] 타겟 넘버, 프로그래머스 알고리즘 level2 (0) | 2019.09.18 |
---|---|
[Java 알고리즘] 최대값과 최소값, 프로그래머스 level2 (0) | 2019.09.18 |
[Java 알고리즘] JadenCase 문자열 만들기, Programmers 문제풀이 level2 (0) | 2019.09.17 |
[Java] 자바 알고리즘, 모의고사 level1 (0) | 2019.09.16 |
[Java] 자바 알고리즘, 가장 큰 수 프로그래머스 level2 (0) | 2019.09.03 |