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;} 라는 함수를 넣어주면 됩니다.
한 문제씩 풀수록 새롭게 더 많이 알게되는 자바스크립트이네요...ㅎㅎㅎㅎㅎ
프로그래머스 Level1 - 모의고사 (JavaScript) (0) | 2020.05.09 |
---|---|
프로그래머스 Level1 - 2016년 (JavaScript) (0) | 2020.05.09 |
프로그래머스 Level1 - 직사각형 별찍기 (JavaScript) (0) | 2020.05.09 |
프로그래머스 Level1 - 수박수박수박수박수박수? (JavaScript) (0) | 2020.05.09 |
프로그래머스 Level 1 - 가운데 글자 가져오기 (JavaScript) (0) | 2020.05.09 |