♾️ 코딩테스트 - 가장 큰 수
Lv 2. 가장 큰 수
func solution(_ numbers:[Int]) -> String {
if numbers.allSatisfy { $0 == 0 } {
return "0"
}
var stringNum = numbers.map { (String($0)) }
let a = stringNum.sorted { String(repeating: $0, count: 3) > String(repeating: $1, count: 3) }
return a.joined()
}
- 같은 숫자길이끼리 정렬하면 내가 의도한대로 정렬이 되었는데,
30, 3 이런 같은 숫자가 맨 앞에 올 경우 30이 문자열 자체가 길다보니 더 큰 값으로 왔다.
- 다행이 문제를 보니 각 숫자의 크기는
1000 이하였다. 한자리 숫자와 비교해야 할 가장 긴 숫자는 세자릿수이기 때문에 3번 반복해주어서 정렬하도록 만들었다.
📚 sorted 정렬기준으로 비교하기
📘 기본 형태
array.sorted { a, b in
key(a) < key(b)
}
📘 기본 예시 (간단한 정렬기준)
let arr = ["apple", "kiwi", "banana"]
let result = arr.sorted {
$0.count < $1.count
}
📘 가공한 값으로 정렬
let arr = ["990", "99", "9"]
let result = arr.sorted {
String(repeating: $0, count: 3) < String(repeating: $1, count: 3)
}
📘 여러 조건일 때 (if문)
let result = arr.sorted {
if $0.count == $1.count {
return Int($0)! < Int($1)!
}
return $0.count < $1.count
}
📘 여러 조건일 때 (튜플 사용)
let result = arr.sorted {
($0.count, $0) < ($1.count, $1)
}
- 튜플에 넣으면 자동으로 순서대로 비교해줌
- 일단 길이 비교하고 같은 경우 그 다음 값 비교함
- 정렬할때 매번 계산하지 말고 정렬 기준을 정해서 미리 묶어두는 방식
let result = arr
.map { ($0, String(repeating: $0, count: 3)) }
.sorted { $0.1 < $1.1 }
.map { $0.0 }
📘 비교 결과
| 이전 코드 | 이후 코드 |
|---|
 |  |