https://school.programmers.co.kr/learn/courses/30/lessons/12935
이 문제는 내가 잘못 풀었다고 생각해서 기록한다.
내가 풀고 싶은 형태가 있었는데 그걸 제대로 구현을 못 했고
다른 사람의 풀이에 가니 제일 위에 내가 원했던 구현 방법이 있었다.
import java.util.*;
import java.util.stream.*;
class Solution {
public int[] solution(int[] arr) {
List<Integer> arrList = new ArrayList<>();
for(int e : arr) {
arrList.add(e);
}
arrList.remove(arrList.stream().min(Integer::compare).get());
return arrList.isEmpty() ? new int[]{-1} : arrList.stream().mapToInt(i -> i).toArray();
}
}
나는 arr을 스트림으로 풀어서 거기서 min 뽑고 그걸 배열에서 바로 지우고 싶었다.
그런데
1. 배열을 바로 스트림으로 푸는 게 기억이 안 났고
2. remove를 하려면 배열로는 안 된다고 생각했다.
그래서 ArrayList를 만들었고(불필요), ArrayList를 배열로 컨버팅했다(불필요).
내가 원했던 딱 그 식을 보자.
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. 배열에서도 min을 뽑을 수 있다!
Arrays.stream(arr).min()이 가능하다! 그리고 이걸 getAsInt()로 뽑아야 한다!
2. 배열에서 remove를 할 수 없는 건 맞다!
그런데 여기처럼 Arrays.stream(arr).filter(i -> i != min)
배열의 요소가 min이 아닌 것만 뽑아서
바로 toArray하는 게 더 스마트하다!
발상을 전환할 필요가 있다.
'코딩테스트 연습' 카테고리의 다른 글
이진수 더하기 (0) | 2024.05.05 |
---|---|
문자열 내림차순으로 배치하기 (0) | 2024.05.04 |
가운데 글자 가져오기 (0) | 2024.05.04 |
없는 숫자 더하기 (0) | 2024.05.02 |
x만큼 간격이 있는 n개의 숫자 풀이 - Lv. 1 (0) | 2024.04.25 |