코딩테스트/Programmers
[Programmers] 제일 작은 수 제거하기
주니어주니
2023. 8. 10. 16:39
굉장히 쉬워보였는데 낑낑대다가 막판에 결국 참고했다 ;
인덱스까지 해놓고선 마지막 한줄 answer[index++] = arr[i]를 왜 생각을 못해냈지??
대가리가 왤케 안돌아가는겨
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int[] answer = new int[arr.length - 1];
int min = arr[0];
int index = 0;
if (arr.length == 1)
return new int[]{-1};
for(int i=0; i<arr.length; i++) {
if (arr[i] < min)
min = arr[i];
}
for(int i=0; i<arr.length; i++) {
if (arr[i] == min) {
continue;
}
answer[index++] = arr[i];
}
return answer;
}
}
Stream 쓰는법
import java.util.*;
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();
}
}
보기에는 좋지만 시간이 엄청 걸림
📌 Arrays.stream(arr)과 IntStream.of(arr)의 차이
1. Arrays.stream(arr)
- 주어진 배열의 모든 요소를 스트림으로 반환
- 배열의 요소들이 기본 타입(int, long, double)인 경우 자동으로 해당 기본 타입의 스트림('IntStream', 'LongStream') 생성
- int[] 배열 -> IntStream으로 변환
-> 배열의 각 요소를 개별적으로 처리
2. IntStream(arr)
- 주어진 인수들을 가지고 int 형식의 스트림 생성
- int[] 배열 -> 배열 자체가 하나의 인수로 취급되어 하나의 int 스트림 생성
-> 배열 자체를 하나의 값으로 처리
int[] arr = {1, 2, 3, 4, 5}; // Arrays.stream(arr)를 사용한 경우 IntStream stream1 = Arrays.stream(arr).map(x -> x * 2); // IntStream.of(arr)를 사용한 경우 IntStream stream2 = IntStream.of(arr).map(x -> x * 2); stream1.forEach(System.out::println); // 2, 4, 6, 8, 10 출력 stream2.forEach(System.out::println); // 1, 2, 3, 4, 5 출력