목차
문제

단순히 정수의 정렬이라고 생각하여 Swift의 sorted() 메소드를 사용하여 풀었으나 결과는 시간초과...
let count = Int(readLine()!)!
var numbers = [Int]()
while let line = readLine() {
numbers.append(Int(line)!)
}
var result = ""
for number in numbers.sorted() {
result += "\(number)\n"
}
print(result)
계수 정렬
정수를 정렬해주는 알고리즘을 나무위키에서 찾아보던 중 현재의 조건에 맞는 가장 빠른 방법을 찾았다.

조건: 데이터(정수)의 최댓값 k가 크지 않을 경우
시간복잡도: O(n + k)
예시:
let 최댓값k = 10
let 정렬할배열 = [1, 3, 7, 5, 2, 3, 1, 5]
var 결과 = [Int]()
1. 1에서 10까지의 카드를 나열한다.
2. 정렬할 배열에서 앞에서부터 정수를 하나씩 꺼내서 정수와 일치하는 숫자의 카드에 개수를 적는다.
3. 카드에 적힌 개수대로 결과배열에 카드의 숫자를 넣는다.
코드
(참고: https://dev-mandos.tistory.com/130)
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 {
result += String(repeating: "\(i)\n", count: cards[i])
}
print(result)
정리
Swift에 API가 많기도 하고, 불편함을 못느꼈다보니, 여지껏 알고리즘의 중요성을 잘 몰랐던 것 같다.
CS50강의를 들을때도 이런 것도 있구나 하고 넘어갔었는데, 알고리즘을 풀어보며 그 중요성과 필요성을 깨닫게 됐다.
참고
정렬 알고리즘
정렬 알고리즘을 소리로 표현한 영상이다. 최신판인 0.6.5버전 을 다운로드 받으면 위키 정렬등이 포함된 총 30
namu.wiki
계수 정렬 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 계수 정렬 또는 카운팅 소트(counting sort)는 컴퓨터 과학에서 정렬 알고리즘의 하나로서, 작은 양의 정수들인 키에 따라 객체를 수집하는 것, 즉 정수 정렬 알고
ko.wikipedia.org
[BOJ] 백준 10989 수 정렬하기 3 (Swift)
문제 https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이
dev-mandos.tistory.com
[Swift] 10989 : 수 정렬하기 3
Counting Sort 를 이용해 수를 정렬하고, Swift 시간 초과 문제를 해결해봅시다!
velog.io