실력 향상 일지/프로그래머스
[Java] 제일 작은 수 제거하기
juniordev
2022. 10. 24. 18: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) {
List<Integer> num = new ArrayList<>();
List<Integer> ser = new ArrayList<>();
int searchnum = 0;
for(int a : arr){ // 검색찬스 사용 ( 배열 -> ArrayList )
num.add(a);
}
for(int a : arr){
ser.add(a);
}
Collections.sort(num);
searchnum = num.get(0);
ser.remove(Integer.valueOf(searchnum));
int ans[] = new int[ser.size()];
if(ans.length == 0){
return new int[]{-1};
}
for (int i = 0; i < ser.size(); i++) {
ans[i] = ser.get(i);
}
return ans;
}
}
먼저 간단하게(?) 풀기위해 ArrayList를 사용해야했다.
일단 sort를 하기위한 num과 그냥 있던 배열 ser을 List로 선언하고 둘다 arr값을 넣어줬다.
그리고 num을 sort하고 가장 작은수를 제거하기위해 sort한 수의 제일 앞에있는 숫자를 remove로 제거했다.
그리고 ans라는 배열을 ser의 크기로 선언해주고 ser의 값을 ans에 넣어줬다.
만약 배열에 값이 하나밖에 없을때 그 하나를 제거하므로 return할 값이 없다.
이럴때는 문제에서 -1을 return하라고 했으므로 -1을 return할수있게 코드를 짜주고 나머지 상황에서는 ans를 reutrn해준다.
회고
처음에 엄청 고민하다가 List하나는 sort해서 제일 작은 수 찾는데만 쓰고 나머지 List하나에서 그 작은수를 지운 후 배열로 전환시켜준 후 return시켜주는게 제일 컴팩트하게 끝날것 같아서 이런식으로 풀었다.
💻프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12935#