성장일기

내가 보려고 정리하는 공부기록

코딩테스트/프로그래머스 Lv.0

[프로그래머스] 수열과 구간 쿼리 2 - JAVA

와나나나 2023. 7. 9. 16:53
728x90

프로그래머스 _ 코딩 기초 트레이닝 DAY 6 - (5)

출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

입력 #1 | arr = [0,1,2,4,3]  queries = [[0,4,2],[0,3,2],[0,2,2]]

출력 #1 | [3,4,-1]


>> 풀이 <<

queries가 이중배열이라서 이중반복문을 활용하여 문제를 풀어야한다. 나중에 리턴해줄 정답배열을 생성한 후 큰 수를 채워넣고,  if문을 이용해 가장 작은 arr[i]을 찾아준다. 

  • 배열에 일정 값 채워넣기 -> Arrays.fill()
    • Arrays.fill(array명, 값)을 이용해  배열에 값을 채워넣는다. 이때 가장 큰 수를 채워넣고 싶었으므로 Integer.MAX_VALUE 를 이용해주었다.
    • Integer.MAX_VALUE는 정수의 최대값을 표현하는 필드이다. 추가로 Integer.MIN_VALUE는 정수의 최소값을 표현하는 필드이다.

알게된 개념은 위 내용정도이고, 이를 이용해 코드를 작성하였다.

import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        Arrays.fill(answer, Integer.MAX_VALUE);
        

        for (int i = 0 ; i < queries.length ; i++) {
            for (int j = queries[i][0] ; j <= queries[i][1] ; j++) {
                if (arr[j] > queries[i][2]) {
                     if(answer[i] > arr[j]) answer[i] = arr[j];
                }
            } 
            if (answer[i] == Integer.MAX_VALUE) answer[i] = -1;
        }
        return answer;
    }
}