반응형
문제 링크 - 12935
코딩테스트 연습 - 제일 작은 수 제거하기 | 프로그래머스 (programmers.co.kr)
문제 이해하기
배열을 순서대로 탐색하며 가장 작은 수를 찾아서 해당 수만 제거하고 새로운 배열에 담으면 되겠다.
배열이 빈 경우에는 -1
리턴이므로 입력 배열의 길이가 1이면 바로 -1
을 리턴하면 되겠다.
문제 풀이
1번 풀이
public int[] solution(int[] arr) {
if(arr.length == 1) return new int[] {-1};
// 순서대로 탐색하며 가장 작은 수 찾기
int min = Integer.MAX_VALUE;
for(int a : arr) {
if(min > a) min = a;
}
// 위에서 찾은 가장 작은 수를 제외하고 새로운 배열 만들기
int[] newArr = new int[arr.length-1];
int index = 0;
for(int a : arr) {
if(min != a) newArr[index++] = a;
}
return newArr;
}
입력 배열의 크기가 1인 경우 바로 [1] 리턴
가장 작은 수를 찾기 위해 변수:min 을 초기화하고 순서대로 탐색하며 더 작은 수를 찾으면 min을 해당 인덱스번호로 수정한다.
이렇게 찾은 가장 작은 수의 인덱스번호(min)을 제외한 다른 수를 새로운 배열에 담는다.
2번 풀이
public int[] solution(int[] arr) {
if(arr.length <= 1) return new int[] {-1};
// 배열을 리스트로 변환하면서 가장 작은 수 찾기
int min = Integer.MAX_VALUE;
List<Integer> list = new ArrayList<Integer>();
for(int i=0; i<arr.length; i++) {
list.add(arr[i]);
if(min > arr[i]) min = arr[i];
}
// 가장 작은 수 제거 후 리스트를 새로운 배열로 변환
list.remove(list.indexOf(min));
int[] newArr = new int[list.size()];
for(int i=0; i<newArr.length; i++) newArr[i] = list.get(i);
return newArr;
}
배열을 순서대로 탐색하며 리스트에 담는다. 이 때 가장 작은 수를 찾아 min 에 저장해둔다.
가작 작은 수를 제거 후 리스트를 배열로 변환해 반환한다.
3번 풀이
public int[] solution(int[] arr) {
if(arr.length == 1) return new int[] {-1};
int min = IntStream.of(arr).min().getAsInt();
return IntStream.of(arr).filter(i -> i != min).toArray();
}
스트림을 활용한 풀이
min() 메소드를 통해 가장 작은 수를 찾는다.
filter() 를 통해 가장 작은 수를 제외한 나머지를 탐색한다.
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 자릿수 더하기 java (0) | 2021.12.28 |
---|---|
프로그래머스 - 정수 내림차순으로 배치하기 java (0) | 2021.12.27 |
프로그래머스 - 최대공약수와 최소공배수, 유클리드 호제법 java (0) | 2021.12.22 |
프로그래머스 - 핸드폰 번호 가리기 java (0) | 2021.12.21 |
프로그래머스 - 행렬의 덧셈 java :: 12950 (0) | 2021.12.20 |