정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
function solution(arr, queries) {
let answer = [];
for (let i = 0; i < queries.length; i++) {
let newArr = [];
for (let j = queries[i][0]; j <= queries[i][1]; j++) {
if (arr[j] > queries[i][2]) newArr.push(arr[j]);
}
answer.push(Math.min(...newArr));
if (Math.min(...newArr) === Infinity) {
answer.push(-1);
}
}
answer = answer.filter((el) => el !== Infinity);
return answer;
}
for문의 중첩으로 코드 해석이 힘들다!
for 문으로 단순하게 반복하고 있을 땐
내가 뭔가 잘못하고 있는거 같은데...
라고 생각하자!!
slice와 filter를 이용한 방법이다.
function solution(arr, queries) {
return ex30FindMinValues(arr, queries);
}
function ex30FindMinValues(arr, queries) {
const answer = [];
for (const [start, end, threshold] of queries) {
const filteredArr = arr.slice(start, end + 1).filter(value => value > threshold);
if (filteredArr.length === 0) {
answer.push(-1);
} else {
answer.push(Math.min(...filteredArr));
}
}
return answer;
}