프로그래머스Lv0 - 수열과 구간 쿼리 3, 수열과 구간 쿼리 2

감자·2023년 7월 22일
0

수열과 구간 쿼리 3

Q. 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

  1. queries 배열의 모든 query에 대해 반복
  2. n = arr[queries[i][0]]; 즉 arr[i] 저장
  3. arr[queries[i][1]] 즉 arr[j] 값임
class Solution {
    public int[] solution(int[] arr, int[][] queries) {

        int n = 0;
        for(int i =0; i<queries.length; i++){
            n = arr[queries[i][0]];
            arr[queries[i][0]] = arr[queries[i][1]];
            arr[queries[i][1]] = n;
        }
        return arr;
    }
}

수열과 구간 쿼리 2

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

1.answer 배열을 Integer.MAX_VALUE 로 초기화 함 (정수의 최댓값) 이 값은 최소값을 찾는 과정에서 임시로 사용됨

  1. for문을 통해 i, j 해당 query의 범위 내에서 반복됨

  2. answer[j] = Math.min(answer[j], arr[i]); 만약 arr[i]가 현재까지 찾은 최소값인 answer[j]보다 작다면 answer[j]를 arr[i]로 업데이트 한다. 그러면 범위 내에 가장 작은 수를 찾을 수 있다

  3. answer[j]가 여전히 Integer.MAX_VALUE 경우 결과가 존재하지 않으니 -1로 설정해준다.

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;
    }
}
profile
코딩하는 감자

0개의 댓글