알고리즘 (JS) / / 2024. 1. 9. 22:30

[sort] 배열에서 숫자, 문자열 정렬하기

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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유