[프로그래머스] K번째수 - JavaScript

coderH·2022년 6월 4일
1

프로그래머스코테

목록 보기
16/27
post-thumbnail

문제

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때,
k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때,
commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아
return 하도록 solution함수를 작성해주세요.

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

arraycommandsreturn
[1, 5, 2, 6, 3, 7, 4][[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]

정답

function solution(arr, commands) {
    const answer = [];
    for (let i = 0; i < commands.length; i++) {
        const [start, end, order] = commands[i];
        const newArr = arr.slice(start-1, end).sort((a, b) => a - b);
        answer.push(newArr[order-1]);
    }
    return answer;
}

풀이

commands의 횟수만큼 반복하며 반복이 끝날때마다 결과값을 answer 변수에 넣어줍니다.

commands는 시작인덱스, 종료인덱스, n번째 수로 이루어진 배열이므로
구조 분해 할당을 이용해 각각 start, end, order변수로 할당합니다.

이후 slice메소드를 이용해 arrstartend 범위의 요소들만 추출하고 이를 오름차순으로 정렬한 후 인덱스에 맞도록 정렬된 배열의 order-1번째 요소를 answerpush합니다.

기존의 arr은 반복시마다 사용해야 하므로 건드리지 않습니다.

0개의 댓글