[Algorithm] 프로그래머스_K번째수(js)

이나현·2021년 9월 14일
0

algorithm

목록 보기
2/3
post-thumbnail

문제상황

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

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

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

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

처음 코드

function solution(array, commands) {
    let newArr = [];
    for(let i = 0; i < commands.length; i++) {
        let splitArr = array.slice((commands[i][0]-1), (commands[i][1])).sort()
        newArr.push(splitArr[commands[i][2]-1])
    }
  return newArr
}

처음 코드에서 문제를 실행시켰을 때, 정답은 맞췄지만 체점 결과가 85.7점이 나와 통과를 하지 못했다.

정확도에서 문제 2번이 통과를 하지 못했는데, 어떤 부분이 문제일까 생각을 해보니 sort 메소드에 정렬 순서를 정의하는 매개변수를 작성하지 않은게 정확도를 떨어뜨리는 요인 같았다.

arr.sort([compareFunction])

  • compareFunction(Optional): 정렬 순서를 정의하는 함수
    comparerFunction이 제공되지 않는다면 요소를 문자열로 변환하고 유니 코드 포인트 순서로 문자열을 비교하여 정렬한다.

최종 코드

function solution(array, commands) {
    let newArr = [];
    for(let i = 0; i < commands.length; i++) {
        let splitArr = array.slice((commands[i][0]-1), (commands[i][1])).sort((a,b)=>a-b)
        // let sortArr = splitArr.sort();
        newArr.push(splitArr[commands[i][2]-1])
  }
  return newArr
}

sort 부분에 오름차순 정렬의 optional 매개변수를 작성하여 정확도를 올렸더니 통과했다.

function compareFunction(a,b) {
return a-b
} //오름차순 정렬

map함수를 이용한 풀이

나도 알고리즘에서 map과 forEach를 마음대로 쓸 수 있는 날이 왔으면 좋겠다! 그렇게 프로젝트랑 실무할 때는 map을 잘 돌리면서.. 이렇게 배워가는 거겠죱

function solution(array, commands){
  let answer = [];
  answer = commands.mab(c =>{
    return array.slice(c[0]-1, c[1]).sort((a,b)=> a-b)[c[2]-1];
  })
    return answer;
}
profile
technology blog

0개의 댓글