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

Seah Lee·2023년 6월 21일
0

프로그래머스

목록 보기
24/57
post-custom-banner


어려웠다^^.....

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        
        int[] result = new int[queries.length];
        
        for(int i=0;i<queries.length;i++){
        
            int max = Integer.MAX_VALUE;
 
            int s = queries[i][0];
            int e = queries[i][1];
            int k = queries[i][2];
            boolean found = false;
            
            for(int x=s;x<=e;x++){
                if (k < arr[x] && max > arr[x]){
                    max = arr[x];
                    found = true;
                } 
                
            }
            result[i] = found ? max : -1;
        }
        return result;
    }
}

boolean으로 값 구분하는거 okay..
MAX_VALUE에 대한 개념이 잘 정립이 안되어있는듯?

[챗지피티씨의 도움]
주어진 코드에서 min은 해당 쿼리 범위 내에서 arr[j] 중에서 k보다 크면서 가장 작은 값을 저장합니다.

  1. min 변수는 초기값으로 Integer.MAX_VALUE로 설정됩니다. 이는 현재까지 쿼리 범위 내에서
  2. 어떤 값도 min보다 작아야 함을 나타냅니다.
  3. 쿼리 범위 내에서 arr[j]를 순회하면서 각 요소를 검사합니다.
  4. 만약 arr[j]가 k보다 크고, 동시에 min보다 작다면, 새로운 최소값이 발견된 것입니다.
  5. 이때, min 값을 arr[j]로 업데이트하고, found 변수를 true로 설정합니다.
  6. 이 과정을 통해 쿼리 범위 내에서 k보다 크면서 가장 작은 값을 찾습니다.
  7. 모든 요소를 검사한 후, found 변수의 값에 따라 결과를 저장합니다. 만약 found가 true라면 최소값이 존재하므로 min을 결과 배열에 저장하고, found가 false라면 쿼리 범위 내에서 조건을 만족하는 값이 없으므로 -1을 저장합니다.

따라서, min은 각 쿼리 범위 내에서 k보다 크면서 가장 작은 값을 찾기 위해 사용되는 변수입니다.

[다른 사람의 풀이]
음 ! 값이 없으면 -1로 하는거를 나는 마지막에 boolean 값으로 구분지어줬는데

Arrays.fill(answer, -1);

로 진즉이 -1을 기본값으로 배열을 채워둔 사람도 있다 !
방법이 많구나 신기하다..

다시 풀어보는 것도 좋을 것 같은 문제
오늘은 좀 일일 코테풀이가 오래걸렸단

profile
성장하는 개발자
post-custom-banner

0개의 댓글