

TECH.KAKAO.GG
프로그래머스 수열과 구간 쿼리 2
Algorithm
👁️ 366일 전
function solution(arr, queries) {
const answer = [];
for (const [s, e, k] of queries) {
let min = Infinity;
for (let i = s; i <= e; i++) {
if (arr[i] > k && arr[i] < min) {
min = arr[i];
}
}
answer.push(min === Infinity ? -1 : min);
}
return answer;
}
🔍 문제 설명
정수 배열 arr
와 2차원 정수 배열 queries
가 주어집니다.
각 query
는 [s, e, k]
형태이며, 다음과 같은 작업을 수행해야 합니다:
-
s ≤ i ≤ e
인 인덱스 범위에서arr[i]
중 k보다 크면서 가장 작은 값을 찾습니다. -
만약 해당 조건을 만족하는 값이 없다면
-1
을 결과로 저장합니다. -
모든 쿼리에 대해 결과를 배열로 반환합니다.
🧠 문제 해설
각 쿼리 [s, e, k]
는 다음의 의미를 갖습니다:
-
배열
arr
의s
부터e
까지 부분 구간을 살펴봅니다. -
그 안에서 k보다 크고, 가장 작은 값 하나만을 찾습니다.
-
그 값이 없다면
-1
을 반환합니다.
✅ 최적화된 접근 방식
✔ 핵심 아이디어
-
arr[s]
부터arr[e]
까지 순회하면서k보다 크고
, 현재까지 찾은 값보다 작은 값이 있으면 갱신합니다. -
가장 작은 값만 기억해두면 되므로
O(n)
으로 해결할 수 있습니다.
🔍 코드 해설
-
min
을Infinity
로 초기화합니다 (어떤 수보다도 크도록). -
s
부터e
까지 순회하면서 조건에 맞는 수를 찾습니다. -
조건:
arr[i] > k
이면서, 현재min
보다 작을 때만 갱신. -
찾은 수가 없으면
Infinity
그대로이므로-1
을 넣습니다.
키워드
프로그래머스 수열과 구간 쿼리 2수열과 구간 쿼리 2배열 최소값 찾기 알고리즘JavaScript 배열 최적화