[Java Algorithm] 프로그래머스 Lv.0 _ 수열과 구간 쿼리 2

2025. 2. 24. 15:50·Algorithm Study

[문제]

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

 

[Algorithm]

반복문을 외부와 내부에 사용하여 조건을 만족하는 값을 찾는다.

1. 외부 반복문 

2차원 배열 queries의 길이만큼 실행

queries의 원소를 반복하면서 각 query의 원소들을 s,e,k에 각각 할당 + min값을 선언하여 조건에 이후 내부 반복문에서 조건에 알맞는 min값을 할당

2. 내부 반복문

s와 e 사이를 순회하면서 arr배열의 원소가 min보다 작고, k보다 큰 값을 찾아서 min에 할당하면서 반복문 실행 (if문 활용)

 

[Code]

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            int s = queries[i][0];
            int e = queries[i][1];
            int k = queries[i][2];
            int min = Integer.MAX_VALUE;
            for (int j = s; j <= e; j++) {
                if (arr[j] < min && k < arr[j]) {
                    min = arr[j];
                }
            }
            if (min != Integer.MAX_VALUE) {
                answer[i] = min;
            } else {
                answer[i] = -1;
            }
        }
        return answer;
    }
}

 

아직도 제대로 이해하지 못함

너무 어려움.. 나중에 다시 풀어봐야함 !

 

 

[+ 다른 사람 풀이]

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        // 결과를 저장할 배열을 생성하고 -1로 초기화합니다.
        int[] answer = new int[queries.length];
        Arrays.fill(answer, -1);

        // 각 쿼리에 대해 반복합니다.
        for (int idx = 0; idx < queries.length; idx++) {
            int[] query = queries[idx];
            int s = query[0], e = query[1], k = query[2];

            // 주어진 범위 내에서 k보다 크면서 가장 작은 값을 찾습니다.
            for (int i = s; i <= e; i++) {
                if (k < arr[i]) {
                    // 현재까지의 최솟값을 업데이트합니다.
                    answer[idx] = answer[idx] == -1 ? arr[i] : Math.min(answer[idx], arr[i]);
                }
            }
        }

        // 결과 배열을 반환합니다.
        return answer;
    }
}
import java.util.stream.IntStream;

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();
    }
}

 

 

[+ Plus]

* Arrays.fill()

자바에서 배열의 모든 값을 지정한 값으로 초기화하는 메서드

 

 

 

⭐️ 나중에 꼭 다시 풀어볼 것

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.0 _ 배열 만들기 4  (0) 2025.02.25
[Java Algorithm] 프로그래머스 Lv.0 _ 콜라츠 수열 만들기  (0) 2025.02.25
[Java Algorithm] 프로그래머스 Lv.0 _ 수열과 구간 쿼리 3  (1) 2025.02.24
[Java Algorithm] 프로그래머스 Lv.0 _ 등차수열의 특정한 항만 더하기  (0) 2024.10.31
[Java Algorithm] 프로그래머스 Lv.0 _ 코드 처리하기  (0) 2024.10.30
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.0 _ 배열 만들기 4
  • [Java Algorithm] 프로그래머스 Lv.0 _ 콜라츠 수열 만들기
  • [Java Algorithm] 프로그래머스 Lv.0 _ 수열과 구간 쿼리 3
  • [Java Algorithm] 프로그래머스 Lv.0 _ 등차수열의 특정한 항만 더하기
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • Algorithm Study (39)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    study
    자바알고리즘
    ios프로그래밍
    스위프트기초
    리얼학습일기
    리얼클래스
    프로그래밍언어
    Algorithm
    ios개발
    Python
    파이썬문법
    javaStudy
    나도코딩
    The Office
    타일러영어
    정보처리기사
    정보처리기사실기
    정보처리기사프로그래밍언어
    정처기실기
    javaalgorithm
    알고리즘
    영어회화
    ios프로그래밍을위한스위프트기초
    Java
    더오피스
    파이썬
    프로그래머스
    파이썬기초
    영어독학
    SWIFT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.0 _ 수열과 구간 쿼리 2
상단으로

티스토리툴바