
내가 생각했을때 문제에서 원하는부분
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다.
queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
내가 이 문제를 보고 생각해본 부분
solution 메서드는 쿼리 배열의 길이만큼 answer 배열을 만든다.
각 쿼리에 대해 s, e, k를 분리하여 [s, e] 범위 내의 arr 요소를 탐색한다.
k보다 큰 요소 중 가장 작은 값을 찾는데, 이를 위해 minVal을 Integer.MAX_VALUE로 초기화하고 조건문을 통해 값을 갱신한다.
조건을 만족하는 값이 없으면 found가 false인 상태로 남아 있으므로 -1을 answer에 저장한다.
모든 쿼리를 처리한 뒤 결과 배열을 반환한다.
main 메서드는 테스트용 데이터로 arr과 queries를 선언하고 solution을 호출한다.
결과 배열을 Arrays.toString(result)로 출력하여 [3, 4, -1]과 같이 배열 형태로 한 줄에 결과를 보여준다.
코드로 구현
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
for (int q = 0; q < queries.length; q++) {
int s = queries[q][0];
int e = queries[q][1];
int k = queries[q][2];
int minVal = Integer.MAX_VALUE;
boolean found = false;
for (int i = s; i <= e; i++) {
if (arr[i] > k && arr[i] < minVal) {
minVal = arr[i];
found = true;
}
}
answer[q] = found ? minVal : -1;
}
return answer;
}
}
프로그래머스 코드
package programmers;
import java.util.Arrays;
// 프로그래머스 수열과 구간 쿼리 2
public class Main22 {
public static int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
for (int q = 0; q < queries.length; q++) {
int s = queries[q][0];
int e = queries[q][1];
int k = queries[q][2];
int minVal = Integer.MAX_VALUE;
boolean found = false;
for (int i = s; i <= e; i++) {
if (arr[i] > k && arr[i] < minVal) {
minVal = arr[i];
found = true;
}
}
answer[q] = found ? minVal : -1;
}
return answer;
}
public static void main(String[] args) {
int[] arr = {0, 1, 2, 4, 3};
int[][] queries = {
{0, 4, 2},
{0, 3, 2},
{0, 2, 2}
};
int[] result = solution(arr, queries);
// 배열을 [3, 4, -1] 같은 형태로 출력
System.out.println(Arrays.toString(result));
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.