반응형
수 정렬하기 1,2 처럼 내장 함수로 꿀빨려다가 시간초과 나온 문제.
계수정렬로 풀어야 하는 게 핵심이었던 문제다.
하지만 아직 계수정렬 공부하지 못한 상태라?
후다닥 뒤져보면서 풀어봤다.
계수 정렬(Counting Sort)란?
- 각 숫자의 등장 횟수를 저장한 후, 그 정보를 기반으로 정렬하는 방법
- 숫자의 범위가 제한적인 경우(예: 1 ~ 10,000)에 매우 빠르게 동작
- 비교 기반 정렬(퀵 정렬, 병합 정렬)보다 O(n + k) 의 시간 복잡도를 가지므로 특정 상황에서는 더 효율적
- 하지만 메모리를 많이 차지(입력 크기보다 훨씬 큰 배열을 만들어야 함)
수 정렬하기 3 (10987)
문제링크 :https://www.acmicpc.net/problem/10989
수의 범위가 작다면 카운팅 정렬을 사용하여 더욱 빠르게 정렬할 수 있습니다. |
let n = Int(readLine()!)!
var cards = [Int](repeating: 0, count: 10001)
for _ in 0..<n {
cards[Int(readLine()!)!] += 1
}
var result = ""
for i in 1...10000 {
if cards[i] > 0 {
result.append(String(repeating: "\(i)\n", count: cards[i]))
}
}
print(result)
- 크기가 10,001인 배열 cards를 생성 (1~10,000까지 숫자를 저장)
- cards[i]는 숫자 i가 입력된 개수를 의미
- repeating: 0 → 배열을 모두 0으로 초기화
계수 정렬의 시간 복잡도
- 입력 처리 (숫자 카운팅): O(n)
- 출력 처리 (결과 생성 및 출력): O(n + k)
- k는 숫자의 범위 (1 ~ 10000 이므로 k = 10000)
- 전체 시간 복잡도: O(n + k) → 매우 빠름!
반응형
'iOS Dev > Swift 알고리즘 - 문제풀이' 카테고리의 다른 글
[BOJ/백준] Swift - 좌표 압축(18870) (2) | 2025.03.13 |
---|---|
[BOJ/백준] Swift - 나이순 정렬 (10814) (2) | 2025.03.13 |
[BOJ/백준] Swift - 단어정렬 (1181) (0) | 2025.03.13 |
[BOJ/백준] Swift - 좌표 정렬하기 (11650), 좌표 정렬하기 2 (11651) (3) | 2025.03.12 |
[BOJ/백준] Swift - 수 정렬하기(2750), 수 정렬하기2(2751), 대표값2(2587), 커트라인(25305) (1) | 2025.03.10 |