티스토리 뷰

문제출처

 

프로그래머스

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

programmers.co.kr


문제

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

 

입출력 예

arr queries result
[ 0, 1, 2, 4, 3 ] [ [ 0, 4, 2 ], [ 0, 3, 2 ], [ 0, 2, 2 ] ]  [ 3, 4, -1 ]

 

풀이

1. 새로 저장한 배열을 쿼리의 길이만큼 선언
2. 그 배열안에 정수형 가장 큰 값 저장. (이유는 아무 숫자도 저장이 안됐다면 -1을 넣을 수 있는 조건을 넣기 위해)
3. for문 반복을 통해 s <= i <= e 조건 충족.
4. i > k 조건을 만족하며 Math.min 함수를 통해 더 작은 값을 저장

 

소스

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

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