Day 6 조건문, 반복문

Day6 6단계 20231023

5. 수열과 구간 쿼리 2

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        List<Integer> compare = new ArrayList<>();
        int[] answer = new int[queries.length];

        int min = 0;
        int answerIndex = 0;
        for (int[] querry : queries) {
            for (int i = 0; i < arr.length; i++) {
                if (i >= querry[0] && i <= querry[1] && arr[i] > querry[2]) {
                    compare.add(arr[i]);
                    min = Collections.min(compare);
                }
                if (compare.isEmpty()) {
                    min = -1;
                }
            }
            answer[answerIndex] = min;
            min = 0;
            answerIndex++;
            compare.clear();
        }
        return answer;
    }
}
class Solution { 
	public int[] solution(int[] arr, int[][] queries) { 
		int[] answer = {}; 
		return IntStream.range(0, queries.length) 
					.map(q -> IntStream.rangeClosed(queries[q][0], queries[q][1]) 
					 .map(i -> arr[i]) 
					 .filter(i -> i > queries[q][2]) .min().orElse(-1) ).toArray(); } }

풀이 해설(챗gpt)

  1. int[] answer = {};: 빈 배열을 생성하여 결과를 저장할 answer 배열을 초기화합니다.
  2. IntStream.range(0, queries.length): queries 배열의 인덱스 범위에 대한 IntStream을 생성합니다. 이 스트림은 각 쿼리를 순회하기 위해 사용됩니다.
  3. .map(q -> ...): 각 쿼리에 대한 연산을 수행하는 람다 표현식입니다. q는 현재 처리 중인 쿼리의 인덱스를 나타냅니다.
  4. IntStream.rangeClosed(queries[q][0], queries[q][1]): 현재 쿼리의 시작과 끝 범위에 대한 IntStream을 생성합니다. 이 스트림은 현재 쿼리 범위 내의 요소를 순회하는 데 사용됩니다.
  5. .map(i -> arr[i]): 현재 쿼리 범위 내의 인덱스에 해당하는 arr 배열의 요소를 가져옵니다.
  6. .filter(i -> i > queries[q][2]): 현재 쿼리에서 주어진 k 값보다 큰 요소만을 필터링합니다.
  7. .min().orElse(-1): 필터링된 요소 중 최솟값을 찾아 반환합니다. 만약 요소가 없으면(모든 요소가 k보다 작다면), -1을 반환합니다.
  8. .toArray(): IntStream의 결과를 int 배열로 변환하여 해당 쿼리에 대한 결과를 저장합니다.