[programmers] 수열과 구간 쿼리 2 - JavaScript

정수 배열 arr와 2차원 정수 배열 queries가 주어지고, 각 query마다 조건을 만족하는 가장 작은 값을 찾아 결과를 반환하는 문제입니다. 주어진 코드는 queries를 반복하면서 arr에서 조건을 만족하는 값을 찾고, 결과를 answer에 저장하는 방식으로 구현되어 있습니다. 또 다른 코드는 for..of 반복문과 filter(), sort() 함수를 사용하여 문제를 해결하는 방식입니다.
Jan 06, 2024
[programmers] 수열과 구간 쿼리 2 - JavaScript

문제 설명

정수 배열 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, 4, 3]
[[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) { let answer=[]; for(let i = 0 ; i < queries.length ; i ++){ const [s,e,k] = queries[i]; let tempMax = Infinity; for(let j = s ; j <= e ; j++) if(arr[j] > k) tempMax = Math.min(tempMax,arr[j]); if(tempMax === Infinity) tempMax =-1; answer.push(tempMax); } return answer; }

핵심 키워드

  • for문을 통해 queries의 길이만큼 반복해서 [s, e, k]의 값을 변수로 가져온다.
  • 문제에서 제시하는 것보다 큰 값을 max로 설정하고, 만약 arr의 요소 중 조건을 만족하는 값이 있다면 max의 값을 변경한다.
  • 만약 arr의 요소 중 조건을 만족하는 값이 없다면 -1을 리턴한다.
  • 자바스크립트에서 Infinity 전역 속성은 양의 무한대를 나타내는 숫자 값이다.

다른 코드

solution.js

function solution(arr, queries) { var answer = []; for(let [s,e,k] of queries){ //v->요소값, i-> 순회하는 인덱스 //작은것부터 나열해준다음 제일 작은 0번째 인덱스를 temp에 넣어줌 let temp = arr.filter((v,i)=>(i>=s&&i<=e&&v>k)).sort((a,b)=>a-b)[0]; //temp가 존재하면 temp값을 없으면 -1값을 answer에 넣어준다. answer.push(temp?temp:-1) } return answer }

핵심 키워드

  • for.. of 반복문은 일반적으로 배열에 많이 사용된다. 배열의 요소 개수만큼 반복적으로 동작하고, 반복 때마다 각 요소를 사용할 수 있는 변수가 파라미터처럼 주어진다.
  • filter() 함수를 통해 조건에 맞는 요소 값들을 찾고, 찾아진 값들을 sort() 함수를 통해 정렬해서 0번째 인덱스의 값을 가져오면 가장 작은 원소를 찾을 수 있다.
 

결론!

해당 문제를 풀면서 for.. of 문, filter(), sort()함수의 사용법을 익힐 수 있었다.
 
Share article

More articles

See more posts

👨🏻‍💻DriedPollack's Blog