티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42748
코딩테스트 연습 - K번째수
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]
programmers.co.kr
해결 방법
1. for문을 이용해 변수 i, j, k에 commands의 요소들을 할당
2. array에서 i번째부터 j번째까지 추출해 오름차순한 새 배열 만들기
3. 만든 새 배열의 k-1번째값을 answer에 넣기
풀이
function solution(array, commands) {
var answer = [];
for(let num = 0; num < commands.length; num++){
let i = commands[num][0];
let j = commands[num][1];
let k = commands[num][2];
let new_array = array.slice(i-1,j).sort((a,b)=> a - b);
let new_num = new_array[k-1];
answer.push(new_num);
}
return answer;
}
배운 점
1. slice()와 splice()의 차이
- slice()는 배열의 start부터 end전까지를 복사해 새로운 배열 객체로 반환하며 원본 배열은 수정되지 않는다
- splice()는 배열의 기존 요소를 삭제, 교체, 추가함으로써 배열의 내용을 변경하며 즉, 원본 배열 자체를 수정한다
2. sort()
sort()는 문자열로 형변환한 후에 정렬을 실행하기때문에 (예를 들면 10을 2보다 작다고 하는 오류가 발생한다)
따라서 compare 함수를 만들어서 sort()의 인수로 넣어줘야 함을 배웠다
그냥 sort()가 아닌 sort((a,b)=> a - b) 로!
- a - b는 오름차순
- b - a 는 내림차순
문자의 경우
- sort()는 오름차순
- sort().reverse()는 내림차순
3. const [i, j, k] = command
다른 분들의 풀이를 보며 command의 요소들을 i, j, k라는 변수에 한번에 할당하는 심플한 방법이 있다는 것을 알았다
이 방법을 사용한다면
for (const command of commands) {
const [i, j, k] = command
이렇게 좀 더 간결하게 표현할 수 있다
'JS-algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 체육복 (javascript) (0) | 2022.05.04 |
---|---|
[프로그래머스] 신규 아이디 추천 (javascript) (0) | 2022.05.02 |
[프로그래머스] 숫자 문자열과 영단어 (javascript) (0) | 2022.05.01 |