[프로그래머스 1레벨] K번째 수

이민선(Jasmine)·2022년 12월 26일
0
post-thumbnail

나의 코드

function solution(array, commands) {
   let res = [];
    for (let v of commands) {
        res.push(array.slice().splice(v[0]-1,v[1]-(v[0]-1)).sort((a,b)=>a-b)[v[2]-1]);

    };
    return res;
}

command 각각에 대해 array에서 조건에 맞는 값을 뽑아내야 하므로 for of문을 이용했다.
직관적으로 나타내면 v=[시작점,끝점,정렬 후 target점] 인 배열이 될 것이다.
주어진 array에서 splice를 적용하여 시작점부터 끝점까지의 부분 배열을 뽑아내고, sort로 오름차순 정렬시킨다.
(단 이 때 splice와 sort를 적용할 때 배열 자체가 변화하는 것을 막으려면 앞에 slice()를 함께 달아주면 된다.)
오름차순 정렬 후 target하는 값을 찾아 배열에 넣기를, 모든 commands에 대해 반복하면 완성!

그런데 내 코드는 좀 지저분하긴 하다 ㅋㅋㅋㅋㅋㅋ
v랑 index 나타내기 위한 대괄호가 지저분하게 널려 있어서 가독성이 좀 떨어진다

이럴 때는 구조분해할당을 쓰는 방법이 있었다.

function solution(array, commands) {
    return commands.map(command => {
        const [s, e, target] = command
        const newArray = array
            .filter((v, i) => i >= s - 1 && i <= e - 1)
            .sort((a,b) => a - b)    

        return newArray[target - 1]
    })
}  

구조분해 할당으로 시작점, 끝점, target점을 s, e, target이라고 선언해놓으면, filter를 적용하여 배열의 인덱스가 시작점과 끝점 사이에 들어있는 부분 배열을 추려낼 때 for 0f를 적용하여 v[0]나 v[1]라고 쓰는 것보다 훨씬 가독성이 좋다.

지금까지는 불필요한 코드, 중복되는 코드를 간결하게 나타내는 데에 집중했다면, 이제부터는 가독성도 어느 정도 비중을 두고 코드를 작성할 수 있으면 좋겠다.

profile
기록에 진심인 개발자 🌿

0개의 댓글