sort 함수 사용하는 경우
'정렬'과 관련된 문제를 풀 때
1. sort() 함수 사용 금지
2. N의 케이스가 100만 초과 (sort 메서드의 시간 복잡도는 O(NlogN) 이므로)
인 경우를 제외하고는 sort 함수를 사용하여 문제를 해결할 수 있다.
기본
sort 함수는 하나만 기억하면 된다.
어떤 함수를 a, b값을 받아 실행 시켰을 때 값이
음수가 나오면 a가 먼저 b가 나중
값이 양수가 나오면 b가 먼저 a가 나중
값이 0이 나오면 순서를 바꾸지 않음
숫자에 적용
const arr = [1, 5, 3, 2, 7, 10]
arr.sort((a, b) => { return a - b })
만약 첫번째로 1, 5를 매개 변수로 받아서 실행하면 1 - 5 = -4 로 음수가 나온다.
그래서 음수가 나왔기 때문에 a였던 1이 앞으로, b였던 5가 뒤로 간다.
두번째로 5, 3을 매개 변수로 받았다면 5 - 3 = 2 로 양수가 나온다.
양수가 나왔기 때문에 a였던 5가 뒤로, b였던 3이 앞으로 온다.
이런식으로 정렬을 하면 올림차순으로 정렬을 할 수가 있다.
문자에 적용
const arr = ['i', 'am', 'im', 'no', 'more']
arr.sort((a, b) => {
if (a.length < b.length) {
return a.length - b.length
} else {
if (a < b) return -1
if (a > b) return 1
}
})
글자수대로 정렬을 하고 만약 글자수가 같다면 사전순으로 정렬하려고 한다.
이럴 때는 일단 글자수가 다른 경우에는 글자의 길이가 작은 걸 앞으로 보내야 하니까 음수가 나오도록 해주고
글자수가 같은 경우에는
그 자체 단어를 연산자 <, > 로 비교하여 음수, 양수를 통해 정렬을 할 수 있다.
관련 문제: https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
'알고리즘 (JS)' 카테고리의 다른 글
[데이터구조] Linked List (0) | 2023.12.11 |
---|---|
[데이터구조] Stack / Queue (1) | 2023.12.01 |
[데이터구조] 배열 / 객체 / Set / Map (2) | 2023.12.01 |
The Other Algorithms (0) | 2023.11.22 |
Sorting Algorithms (1) | 2023.11.22 |