DEVLOG
프로그래머스 알고리즘#15 - K번째수 본문
728x90
반응형
<문제>
<풀이>
function solution(array, commands) {
var answer = [];
for(var i in commands){
var start = commands[i][0]-1;
var end = commands[i][1];
var k = commands[i][2]-1;
console.log("시작"+start);
console.log("끝"+end);
console.log("자른배열"+array.slice(start,end));
console.log("몇번째"+k);
console.log("결과"+array.slice(start,end).sort()[k]);
answer.push(array.slice(start,end).sort()[k]);
}
return answer;
}
배열의 index는 0부터, 우리가 셀때는 1부터 시작한다는것을 감안하여
각 변수에 배열의 값을 담아서 진행했다.
주어진 범위대로 slice로 배열을 자르고
sort로 정렬한 후
그 배열의 k번째 값을 answer배열에 push하는 순서로 진행했다.
각 단계가 제대로 진행되고 있는지 console로 틈틈히 확인하자!
function solution(array, commands) {
var answer = [];
for(var i in commands){
var start = commands[i][0]-1;
var end = commands[i][1];
var k = commands[i][2]-1;
answer.push(array.slice(start,end).sort()[k]);
}
return answer;
}
콘솔을 지운 코드는 이러한데...
function solution(array, commands) {
var answer = [];
for(var i in commands){
answer.push(array.slice(commands[i][0]-1,commands[i][1]).sort()[commands[i][2]-1]);
}
return answer;
}
굳이 변수처리 안해줘도 될 것 같아서 한줄로 줄이기!
당연히 그냥 통과일 줄 알았는데... 2번 케이스에서 실패했다.
function solution(array, commands) {
var answer = [];
for(var i in commands){
answer.push(array.slice(commands[i][0]-1,commands[i][1]).sort((a,b)=>a-b)[commands[i][2]-1]);
}
return answer;
}
힌트를 보고 sort정렬함수에 비교함수를 정의해주었더니 모두 통과되었다
그런데 sort()와 sort((a,b)=>a-b)의 차이가 뭘까..?
compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬됩니다. 예를 들어 "바나나"는 "체리"앞에옵니다. 숫자 정렬에서는 9가 80보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 "80"은 유니 코드 순서에서 "9"앞에옵니다.
라고 한다.. 암튼 내부 비교함수를 추가해주지 않으면 문자열로 변환되어버리기때문에 오류가 발생하는 듯 하다!
728x90
반응형
'dev log > algorithm' 카테고리의 다른 글
프로그래머스 알고리즘#17 - 직사각형 별찍기 (0) | 2020.12.21 |
---|---|
프로그래머스 알고리즘#16 - 핸드폰 번호 가리기 (0) | 2020.12.21 |
프로그래머스 알고리즘#14 - 두 개 뽑아서 더하기 (0) | 2020.12.21 |
프로그래머스 알고리즘#13 - 3진법 뒤집기 (0) | 2020.12.21 |
프로그래머스 알고리즘#12 - 같은 숫자는 싫어 (0) | 2020.12.21 |
Comments