알고리즘/문제_programmers

Programmers_K번째수

simple_dev 2021. 3. 6. 18:35

programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

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

programmers.co.kr

문제 설명

문제

- 배열 array 의 i 번째 숫자부터 j 번째 숫자까지 자르고 정렬했을 때, k 번째 있는 수를 구하는 문제

- [i, j, k] 를 원소로 가진 2차원 배열 commands 가 매개변수로 주어질 때

- commands 의 모든 원소에 대한 모든 결과를 배열에 담아 return

제한 사항

- array 의 길이는 1이상 100 이하

- array 의 각 원소는 1이상 100 이하

- commands 의 길이는 1 이상 50 이하

- commands 의 각 원소는 길이가 3

 

풀이

풀이

- commands 배열을 순회하면서, array 의 i - 1 이상, j 미만의 길이를 복사

- 복사한 배열을 오름 차순 정렬- k - 1 번째 원소를 answer 배열에 push

주의할점

- sort 는 배열에 영향을 주므로, 사용에 주의해야함

- sort 는 값을 string type 으로 비교하므로, 정렬 조건에 따라 callback function 을 작성

- 배열을 사용하므로, i, j, k 를 그냥 사용하면, 잘못된 결과가 출력되므로 주의해야함

코드

function solution(array, commands) {
  const answer = [];
  // commands 배열을 기준으로 순회
  commands.forEach((value) => {
      const [i, j, k] = value;
      // 조건에 맞는 배열을 복사한 뒤, 오름차순으로 정렬
      const selectList = array.slice(i - 1, j).sort((first, second) => first - second);
      answer.push(selectList[k - 1]);
    })
    return answer;
}