https://programmers.co.kr/learn/courses/30/lessons/12935
문제 설명
- 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수
- 단, 리턴하는 배열이 빈 배열일 경우 배열에 -1을 채워 리턴
제한조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr [i] ≠ arr [j]입니다.
내 풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
ArrayList<Integer> list =new ArrayList<>();
if(arr.length==1){
answer = new int[1];
answer[0]=-1;
}
else{
int min=arr[0];
for(int i=1;i<arr.length;i++){
if(min>arr[i]) min=arr[i];
}
for(int i=0;i<arr.length;i++){
if(arr[i]!=min) list.add(arr[i]);
}
answer = new int[list.size()];
for(int i=0;i<answer.length; i++){
answer[i] = list.get(i);
}
}
return answer;
}
}
가변적인 크기를 가지는 ArrayList를 사용하였다.
arr 배열의 크기가 1인 경우
최솟값을 제거하고 리턴하면 answer 배열의 크기가 0이 되기 때문에 -1을 채워 리턴한다.
배열의 크기가 1보다 큰 경우
우선 반복문을 통해 최솟값을 찾는다.
반복문을 통해 arr 원소 값과 최솟값이 같지 않을 때 list에 원소 값을 추가한다.
반복문을 통해 결과를 리턴해주는 answer 배열에 list값을 하나씩 대입한다.
=> 반복문을 많이 사용한 비효율적인 코드이다.
다른 풀이
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();
}
}
배열 스트림을 생성하여 최솟값을 구한다.
filter 함수를 사용하여 최솟값과 같지 않은 arr원소들을 걸러내고 배열로 변환해 반환한다.
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 > 문자열 다루기 기본 (0) | 2022.01.30 |
---|---|
[Java] 프로그래머스 > 자연수 뒤집어 배열로 만들기 (0) | 2022.01.27 |
[Java] 프로그래머스 > 같은 숫자는 싫어 (0) | 2022.01.27 |
[Java] 프로그래머스 > 약수의 합 (0) | 2022.01.20 |
[Java] 프로그래머스 > 나누어 떨어지는 숫자 배열 (0) | 2022.01.16 |
댓글