[Node.js_6기] 본캠프 TIL_0902

2024. 9. 2. 20:41[Node.js_6기 본캠프 TIL]

▶ 알고리즘 코드카타_K번째수(JavaScript)

 

◈ 고민 시작

 

commands 안에 들어있는 요소 하나하나가 return값을 위한 key값으로 사용되기 때문에, 모든 key를 사용하려면 for문으로 돌려야 했다. 그런데 이 key값들을 사용하기 위해 또 for문을 써야하나? 싶어, 코드를 작성하기 시작했다.

function solution(array, commands) {
    let answer = [];
    
    for(let i=0; i<commands.length; i++){
        let arrKey = commands[i]
        for(let j?){
        // arrKey의 요소들이 각자 역할이 다른데, 반복문을 돌리면 뭔가 이상해질 것 같다
        }
    }
    return answer
 }

 

쓰다보니 for문을 2중 3중으로 써서 되는 문제가 아닌 것 같았다. arrKey값을 한번 사용하고 바로 return 하면 끝나는데 굳이 반복문을 또 쓸 필요가 없었다. 그래서 arrKey 값을 대괄호로 순서대로 호출하기로 했다. 이후 slice()로 기존의 array를 자르고, 크기 순으로 정렬한 뒤, answer 값에 밀어넣어 주면 arrKey가 몇개가 주어지든 원하는 값을 도출할 수 있을 것 같았다. arrKey[0]번째 수부터 arrKey[1]번째 수까지 자르고, 정렬된 배열에서 arrKey[2]번째 수를 return하기 위해서는 index값에 주의해서 사용해야 했다. 

 

잘 풀었나 싶었을 때, sort 과정에서 테스트 케이스를 하나 틀렸다.

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

 

sort()만 써도 숫자가 정렬되는 예제들을 본 기억이 있어서, 조금 간단하게 코드를 써보겠다고 구체적인 정렬 기준을 쓰지 않았더니... 해당 방식은 2자리수가 등장하는 등의 경우에서 불안정성을 보인다고 비추천한다는 글을 보았다. 눈물을 참고 sort에서 자주 보이던 화살표함수를 찾았다.

 

◈ 풀이

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

 

sort는 newArr를 선언할 때 붙여서 써도 되지만, 가독성이 떨어지는 탓에 분리하여 작성해보았다.