프로그래머스 - K번째 수

HaByungNo·2022년 8월 6일
0

알고리즘

목록 보기
26/26
post-thumbnail

프로그래머스 - K번째 수 👈문제 보러가기

문제 이해하기?

  • commands 는 2차원 배열을 원소로 가짐, 그 원소는 각각 [시작, 끝, 정렬후 k번째수]

  • 예를 들어 array 로 [1, 5, 2, 6, 3, 7, 4] 가 들어오면 commands [[2, 5, 3]] 가 이와 같을때, 1번째 인덱스 부터 4번째 인댁스까지 자름 [5, 2, 6, 3] 을 오름차순 정렬 [2, 3, 5, 6] 의 k번째(3번째) = 5 이런식

  • 보자마자 slice() 메서드가 떠올랐다.

    • 매개변수로 start 과 end를 입력받았다면(모두 배열의 인덱스 값) 배열의 start 번째 인덱스 부터 end 번째 인덱스 이전까지 슬라이싱 한다.

예를 들면

// slice() 구문
arr.slice([begin[, end]])

// 예시 코드 
let arr =[2,5,7,4,8,9]
let newArr = arr.slice(2,5)  // 2번째 인덱스부터 4번째 인덱스까지 슬라이싱
console.log(newArr) // [7,4,8]

나의 답안

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

slice() 메서드의 활용법을 안다면 쉽게 풀리는 문제였다.


개선한 답안

const solsol = (array, commands) => {
    return commands.map(el =>{
        const [start, end, posittion] = el
        const newArr = array.slice(start-1, end).sort((a,b) => a-b)
        return newArr.at(posittion - 1)
    })
}

map()을 활용, 구조분해할당 하여 가독성을 높였다.

profile
프라고

0개의 댓글