🔎
프로그래머스 수열과 구간 쿼리2 Js
April 03, 2024
문제 설명
정수 배열 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);
}- queries에 map 순회문을 통해 배열의 길이 만큼 순회한다.
- [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이 반환된다.