문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
  • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ s ≤ e < arr의 길이
    • 0 ≤ k ≤ 1,000,000

입출력 예

arr queries result
[0, 1, 2, 3, 4] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]

입출력 예 설명

입출력 예 #1

  • 첫 번째 쿼리의 범위에는 0, 1, 2, 4, 3이 있으며 이 중 2보다 크면서 가장 작은 값은 3입니다.
  • 두 번째 쿼리의 범위에는 0, 1, 2, 4가 있으며 이 중 2보다 크면서 가장 작은 값은 4입니다.
  • 세 번째 쿼리의 범위에는 0, 1, 2가 있으며 여기에는 2보다 큰 값이 없습니다.
  • 따라서 [3, 4, -1]을 return 합니다.

solution.js

function solution(arr, queries) {
    return queries.map(([s, e, k]) => arr.slice(s, e + 1).filter((n) => n > k).sort((a, b) => a - b)[0] || -1);
}
  1. queries에 map 순회문을 통해 배열의 길이 만큼 순회한다.
  2. [s,e,k] 구조 분해 할당을 통해서 각 순회문을 도는 queries 안에 있는 배열의 각 요소를

구조 분해하여 s, e, k라는 변수에 할당한다. 3. arr 인덱스의 범위(=임의로 j라고 가정)를 slice를 통해 s< j < e+1의 범위까지 자른다
4. filter를 통해 추려진 arr의 배열을 순회하면서 조건문에 맞는 값들만 남게 된다. 5. 이제 가장 작은 값들을 찾기 위해서는 sort((a,b)=> a-b)[0]을 통해서 오름차순으로 정리가 되고 첫번째 인덱스 값을 반환한다. 6. 만약에 배열이 비어있을 경우 or 연산자를 통해서 -1이 반환된다.