본문 바로가기

Computer/알고리즘

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

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

문제

입력

array - 주어진 정수 배열

commands - [i, j, k]가 담긴 배열 (각각 정수이다, 배열의 i번째부터 j번째까지의 배열을 잘라서 오름차순으로 정렬했을 때의 k번째 수)

출력

return - commands를 활용하여 찾은 정수 배열

제한사항

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

풀이

사이트에서 코드 짜기 너무 편하게 하나하나 설명해 줘서 좋았다.

 

  1. i번째부터 j번째의 배열을 자른다. slice(i-1, j) 메서드를 이용한다.
  2. 오름차순으로 정렬한다. sort((a, b) => a-b) 메서드를 이용한다. (오름차순 정렬!)
  3. k번째 수를 검색한다. at(k-1) 메서드를 이용한다. [k-1]도 가능하다.

따라서 javascript의 장점을 이용하여 선언형 프로그래밍으로 작성하였다.

 

시간 복잡도는 commands 배열의 길이를 m, array 배열의 길이를 n이라고 할 때 array 배열을 자르고 정렬한 뒤 검색하므로 O(m*n2log2n)이다.

공간 복잡도는 매개변수로 주어진 배열 등을 저장하므로 O(n)이다.

코드

function solution(array, commands) {
    var answer = commands.map((v)=>array.slice(v[0]-1, v[1]).sort((a, b)=>a-b).at(v[2]-1));
    return answer;
}

 

한줄 코드 오랜만이다.

728x90