[알고리즘] sort()

임수정·2023년 7월 4일
0
post-thumbnail

이번에는 정렬과 관련된 메서드를 소개해드리겠습니다.

sort()

Array.sort([compareFunction])

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.

문제

뒤에서 5등 위로

문제를 보면 오름차순으로 정렬 후 가장 작은 5개의 수를 제외하고 리스트를 배열에 담아 return하는 문제입니다.

먼저, sort()메서드를 활용하였을 때 오름차순으로 잘 정렬이 되는지 확인해 보았습니다.

function solution(num_list) {
    const result = num_list.sort()
    console.log(result)
}

근데 결과값이 오름차순으로 정렬이 되지 않는 것입니다.ㅠㅠ 원래대로라면 [1,4,10,...] 와 같이 나와야 하는데.. '왜 이러는거지..'하는 생각과 함께 구글링을 해보았습니다.

Array.sort([compareFunction]) 에서 compareFunction이 생략될 경우 배열의 element들은 문자열로 취급되어, 유니코드 값 순서대로 정렬

이 내용을 알게 되었습니다. 그래서 오름차순대로 정렬이 되지 않았던 거예요!
그래서 제가 사용한 방법은 다음과 같습니다.

function solution(num_list) {
    const result = num_list.sort((a,b) => {
        return a-b
    })
}

이렇게 a,b를 활용한 단순계산방식을 활용하게 되면

  • a - b가 음수인 경우: a가 b보다 작으므로 a는 b 앞에 정렬
  • a - b가 양수인 경우: a가 b보다 크므로 a는 b 뒤에 정렬
  • a - b가 0인 경우: a와 b는 같은 값으로 간주되며 상대적인 순서는 변동하지 않는다.

위와 같은 이유로 오름차순으로 정렬된 배열의 형태를 확인할 수 있습니다.

해결과정

function solution(num_list) {
    let arr = []
    const result = num_list.sort((a,b) => {
        return a-b
    })
    
    for(let i=5;i<result.length;i++){
    arr.push(result[i])
    }
    return arr
}

저는 오름차순으로 정렬된 배열에서 가장 작은 5자리를 제외해야하니깐 i=5로 시작하는 for문을 작성하였습니다. 다른사람들의 풀이를 보니 splice()를 활용하여 문제를 푸신 분들이 많더라구요! 저도 다음에는 sort(),splice()를 활용하여 문제를 풀어봐야겠습니다!

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글