728x90
https://programmers.co.kr/learn/courses/30/lessons/42746?language=swift
정렬
정수 배열이 주어지면 이들을 적절히 순서를 변경하고 이어 붙여서 만들 수 있는 수 중에
가장 큰 수를 구하는 문제이다.
접근방법
처음에는 큰자리수의 숫자가 큰 것 순으로 정렬하려고 했는데 글자수길이가 상이할 경우 조건을 만족시키는 로직은 찾기 어려웠다.
찾아보니까 그렇게 풀면 출력초과가 난다고 해서..지움!
정렬 방법은 첫번째 문자와 두번째 문자 (Int->String으로 변환한 상태)를 순서를 바꿔서 이어붙인 수의 크기를 비교하는 것이다.
"6", "2" 문자열이 왔으면, "62" 와 "26"을 비교하여 큰 수가 나오는 순서로 정렬되게 하는 방법.
그런데 여기서 0으로만 구성된 배열이 올 경우 결과가 0000...일 수 있다.
정수형이 아니라 문자열을 반환하기 때문에 그대로 반환하면 안되고
첫번째 자리가 0이면 그 뒤에도 모두 0인 것이므로 "0"을 반환해 줘야 한다.
소스코드
import Foundation
func sortedBy(_ s1:String, _ s2:String) -> Bool {
let s1s2:Int = Int(s1 + s2) ?? 0
let s2s1:Int = Int(s2 + s1) ?? 0
return s1s2 > s2s1
}
func solution(_ numbers:[Int]) -> String {
let sortedNumbers = numbers.map{ String($0) }.sorted(by: sortedBy)
let result:String = sortedNumbers.reduce("") { $0 + $1 }
if result.first == "0" {
return "0"
} else {
return result
}
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 입국심사 (Swift) (0) | 2022.04.19 |
---|---|
[프로그래머스] 카펫 (Swift) (0) | 2022.04.15 |
[프로그래머스] 여행경로 (Swift) (0) | 2022.04.08 |
[프로그래머스] 단어 변환 (Swift) (0) | 2022.04.07 |
[프로그래머스] 네트워크 (Swift) (0) | 2022.04.06 |