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를 선언할 때 붙여서 써도 되지만, 가독성이 떨어지는 탓에 분리하여 작성해보았다.
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[Node.js] 미들웨어와 라이브러리 훑어보기 (0) | 2024.09.04 |
---|---|
[알고리즘 코드카타] 두 개 뽑아서 더하기(JavaScript) (0) | 2024.09.03 |
[Node.js_6기] 본캠프 TIL_0830 (0) | 2024.08.30 |
[Node.js_6기] 본캠프 TIL_0829 (0) | 2024.08.29 |
[Node.js_6기 본캠프] CH 2. 개인과제_KPT (1) | 2024.08.28 |