Programmers/Level 1

[Javascript] 프로그래머스 : K번째수

emayom 2021. 7. 4. 00:56

[Javascript] 프로그래머스 Level1 _ K번째수

 

👇🏻

Link_Click

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)


1.

일단 for반복문으로 구성하면서 문제를 파악해봤다.

commands 의 내부 배열이 1개 이상이기 때문에 원본에 영향을 미치지않도록

splice() 대신 slice()를 통해 원하는 조건만큼 배열을 복사했다.

인덱스 대신 번째로 표현하고 있어서 end를 제외하고 각각 -1을 해주었다. 

slice()의 경우 start index ~ end index 전 까지 복사하기 때문에 end는 손대지않았다.

 

정확성 테스트 2번에서 막혀서 85.7점이 나왔다 ㅠㅠ

function solution(array, commands) {
    var answer = [];
    var temp = [];
    
    for(let i=0; i<commands.length; i++){
        var start = commands[i][0] -1;
        var end = commands[i][1];
        var target = commands[i][2] -1;
        
        temp = array.slice(start, end).sort();
        answer.push(temp[target]);
    }
    return answer;
} 

2.

아마도 sort()에 정렬 순서를 정의하지않아서 그런 것 같아서 sort((a,b) => a-b)로 오름차순임을 명시해줬다.

그랬더니 테스트를 모두 통과할 수 있었다.

function solution(array, commands) {
    var answer = [];
    var temp = [];
    
    for(let i=0; i<commands.length; i++){
        var start = commands[i][0] -1;
        var end = commands[i][1];
        var target = commands[i][2] -1;
        
        temp = array.slice(start, end).sort((a,b)=>a-b);
        answer.push(temp[target]);
    }
    return answer;
} 

 


 

[Javascript] 자바스크립트 배열 정렬 함수 : Array.prototype.sort()

[Javascript] 프로그래머스 : K번째수 [Javascript] 프로그래머스 Level1 _ K번째수 👇🏻 Link_Click 👇🏻 시행착오 ( + 코드를 작성하면서든 생각들.) 1. 일단 for반복문으로 구성하면서 문제를 파악해봤다.

emayom.tistory.com

프로그래머스 문제를 풀면서 sort() 함수를 굉장히 많이 사용했다.

복잡한 반복문 없이도 문자나 숫자를 정렬할 수 있다게 큰 이유였다.

 

하지만, sort() 함수는 문자열을 유니코드 코드 포인트(고유한 숫자 값)를 기준으로 정렬 해주는 함수이다.

그렇기 때문에 예제 처럼 [1, 4, 21, 30, 100000]이 아닌 [1, 100000, 21, 30, 4]가 리턴이 되는 것이다.

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]

 

그래서 결론은 숫자에 sort()를 사용하는 경우, 

(정확도를 위해) 오류를 방지하기위해 정렬  순서를 간단하게 화살표 함수로 정의해주는 것이 좋다.

 

+)

MDN에서 sort()가 stable sort가 아님을 명시해놓았는데 이것은 중복 값의 정렬에 해당하는 이야기이다.

구글링으로 stable sort 와 unstable sort의 차이점을 검색해보자!

 

 

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***