상세 컨텐츠

본문 제목

프로그래머스 Level1 - K번째수 (JavaScript) / sort 함수 작동법

알고리즘/JavaScript 코딩테스트

by 테크투아트 2020. 5. 9. 13:44

본문

 

 

 

function solution(array, commands) {
    var answer=[];
    for (var i in commands){
        var li = array.slice(commands[i][0]-1,commands[i][1]).sort(function(a,b){return a-b;});
        
        answer.push(li[commands[i][2]-1]);
    }
    
    return answer;
}

코드를 하나씩 따라가 봅시다.

먼저, 문제의 예시인 array = [1,5,2,6,3,7,4], commands = [[2,5,3],[4,4,2],[1,7,3]] 로 생각해봅시다.

 

for 문을 이용해 commands의 첫번째 원소인 [2,5,3]을 가져옵니다.

그리고 array 배열을 slice를 통해 잘라줍니다.

slice(시작점, 끝점) 이므로 [2,5,3]의 원소들을 적절히 이용하여 array를 잘라주고요, 뒤에 이어서 sort 시켜줍니다.

 

이때, 그냥 .sort();를 하게되면 테스트케이스를 하나 통과를 못하는데요...

그 이유는 sort함수의 배열 기준이 ascii이기 때문이에요.

그냥 소트시키면 [1,10,100,2,3,4,40,400... ] 뭐 이런식으로 문자열기준으로 배열이 된다는 뜻입니다.

그래서 소트함수는 인풋값으로 정렬함수를 넣어줍니다.

 

sort함수 안에 function(a,b){return a-b;} 를 넣어주었는데요.

이 뜻은

 

a,b를 비교해서

 

a-b가 음수가 나오면 a를 b보다 앞에 배치하고,

a-b =0 이면 그대로 배치하고,

a-b가 양수가 나오면 b를 a보다 앞에 배치하라. 는 뜻입니다.

 

즉, 오름차순 정렬하라 라는 뜻이에요..

 

반대로 숫자를 내림차순으로 정렬하고 싶으면 sort 함수 안에 인자로,

function(a,b){return b-a;} 라는 함수를 넣어주면 됩니다.

 

한 문제씩 풀수록 새롭게 더 많이 알게되는 자바스크립트이네요...ㅎㅎㅎㅎㅎ

관련글 더보기