알고리즘

[Programmars] K 번째 수 (JavaScript)

프린벼르 2022. 2. 15. 01:45

k번째 수 문제 설명
k 번째 수 문제 설명

1. 나의 생각 흐름

처음에는 반복되는 숫자를 지워야하는 건가? 라며 문제의 의도를 파악하지 못했다... 정말 문제 이해하는데만 30분?넘게 걸린 것 같다.. 문제를 더 빨리 이해했다면 빨리 풀지 않았을까 싶다.. 생각보다 필요한 개념이 별로 없었다. slice와 sort정도? 그래서 이 문제가 1단계 문제였던 거 같다.

2. 내 코드 정리

function solution(array, commands) {
    let answer = []; 
    commands.forEach(commands => {
    let arr = array.slice(commands[0] - 1, commands[1]).sort((a, b) => a-b);  
// i번째 숫자부터 j번째 숫자까지 자르고 정렬 
//(splice가 마지막값이 들어가지 않으니까..
//command[0]-1에서 command[1] 만큼을 배열로 잘라야함. -1이 들어가는 이유는 인덱스는 0번부터 시작하기 때문)
    answer.push(arr[commands[2] - 1])  // k번째에 있는 수를 구하기
  })
    return answer;
}
slice ( 배열 자르기 ) => arr.slice([begin[, end]])

end index의 값은 잘라낼 배열에 포함되지 않는다.
end index가 생략되면, begin index부터 배열의 끝까지를 잘라낸다.

sort ( 정렬 함수 ) => arr.sort()
arr.sort(function(a, b) { // 오름차순
    return a - b;
    // 1, 2, 3, 4, 10, 11
});

arr.sort(function(a, b) { // 내림차순
    return b - a;
    // 11, 10, 4, 3, 2, 1
});

3. 다른 사람들의 코드

function solution(array, commands) {
    return commands.map(command => {
        const [sPosition, ePosition, position] = command
        const newArray = array
            .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
            .sort((a,b) => a - b)    

        return newArray[position - 1]
    })
}

애로우함수가 사용하기 편하다보니 자주 쓰이는 것 같다. 그런데 애로우함수를 자주 쓰지 않다보니 좀 낯설다고 해야하나 애로우함수를 쓴 풀이를 보면 겁부터 나는 것 같다. 어려워보인다고 하는게 맞는 것 같다. 애로우함수를 자주 써봐야겠다. 또한, filter함수까지 함께 써서인지 더 낯설고 어렵게만 느껴지는 것 같다. 이 해설법은 찬찬히 조금씩 뜯어봐야할 것 같다.

4. 결론

문제를 이해하지 못해서 시간이 좀 걸렸다. 출력부분을 좀 더 신경써서 봐야겠다. splice에 대해서 다시 한번 정리를 해야겠다.