코딩테스트/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 출력