본문 바로가기

개발/코테

[JAVA] 수열과 구간 쿼리2

[문제]

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

 query마다 순서대로 s  i  e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

[내 풀이]

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        for(int j= 0; j< queries.length; j++){
            int min = Integer.MAX_VALUE;
            for(int i =queries[j][0]; i<queries[j][1]+1; i++){
                if (arr[i]> queries[j][2]){
                    min  = Math.min(min, arr[i]);
                }
            }
            answer[j] = (min == Integer.MAX_VALUE)? -1 : min;
            
        }
        return answer;
    }
}

 

- Integer.MAX_VALUE : 정수의 최댓값

- 변수 초기화에 유의하기

 

[다른 사람의 풀이]

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = {};
        return IntStream.range(0, queries.length) #0~queries 배열 길이까지의 정수 스트림 생성
                .map(q -> IntStream.rangeClosed(queries[q][0], queries[q][1]) #쿼리에 대해 해당하는 배열 범위에 대한 정수 스트림 생성
                        .map(i -> arr[i]) #인덱스에 해당하는 배열의 요소 가져옴
                        .filter(i -> i > queries[q][2])#queries[q][2]보다 큰 값들만 필터링
                        .min().orElse(-1) #최소값 찾음, 없을 경우 -1
                ).toArray(); #스트림의 요소들을 배열로 변환해 반환
    }
}

- Stream 공부하기!

'개발 > 코테' 카테고리의 다른 글

[JAVA] 수열과 구간 쿼리 4  (0) 2024.04.12
[JAVA] 수열과 구간 쿼리3  (1) 2024.04.12
[JAVA] 수 조작하기 2  (1) 2024.04.12
[JAVA] 수 조작하기1  (0) 2024.04.11
[JAVA] 마지막 두 원소  (0) 2024.04.11