프로그래머스 - 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() 메서드가 떠올랐다.
예를 들면
// 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()을 활용, 구조분해할당 하여 가독성을 높였다.