자바 문제 풀이/기초문제

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

ari0930 2024. 3. 1. 18:04

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

문제

1차원 배열 arr 과 2차원 배열 queries가 주어진다

queries 의 원소는 각각 [s,e,k] 이렇게 구성된다

s<=i<=e 인 모든 i에 대해서 k 보다 크면서 가장 작은 arr[i] 갖는 값을 반환하면

답이 존재하지 않는다면 -1을 반환한다.

 

입출력 예

 

풀이 

난 동적 배열을 이용해서 문제를 풀었다.

일단 queries 를 도는 for문을 만들고 그안에 이제 그 문제 조건을 맞는값을 찾기 위해

arr를 도는 for을 내부에 만들어서 항상 최소값을  temp에 저장하여  arr 돈느 for 문이 끝나면

temp값을 동적 배열에 넣는 형식으로 만들었다.

 

코드

import java.util.ArrayList;
class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i=0; i< queries.length;i++) {
            int temp=1000001;
            for (int j=queries[i][0];j<=queries[i][1];j++) {
                if (arr[j]>queries[i][2]) {
                    if (temp>arr[j]) {
                        temp=arr[j];
                    }
                }
            }
            if (temp==1000001) {
                temp=-1;
            }
            list.add(temp);
        }


        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }
}

 

다른 사람들 코드를 보니 Arrays클래스를 푼것을 보았다

정답값을 저장할 배열의 크기는 queries의 원소갯수를 알기에 fill을 사용해서 queries의 원소 갯수만큼의 배열크기를 지정하고 최대값으로 채우거나 -1로 채워 위에 나와 있는 for문 코드를 이용하여 채우는 방식을 사용하여 좀더 간결하게 코드를

작성할수 있는것 같다 

반응형