알고리즘 문제 풀이

[Swift] 프로그래머스 LV2. 가장 큰 수

lgvv 2022. 4. 2. 02:01

프로그래머스 LV2. 가장 큰 수

 

접근 방식

 

두 수를 어느 순서로 이어 붙여야 더 큰지로 정렬하는 문제. a와 b를 "ab", "ba"로 이어 붙여 정수로 비교하고 큰 쪽을 앞에 둠. 이렇게 하면 자리 수가 달라도 이어 붙였을 때의 크기로 순서가 정해짐.

 

정렬 후 이어 붙인 결과의 첫 글자가 "0"이면 모든 숫자가 0이라는 뜻이므로 "0"을 반환함. [0, 0, 0] 같은 입력을 처리하는 예외.

 

코드

 

//https://programmers.co.kr/learn/courses/30/lessons/42746
import Foundation

struct p42746 {
    
    static func run() {
//        print(p42746.solution([6, 10, 2])) // 6210
//        print(p42746.solution([3, 30, 34, 5, 9])) // 9534330
        print(p42746.solution([0, 0, 0])) // 0
    }
    
    static func solution(_ numbers:[Int]) -> String {
        // 차례로 앞 두개를 순서를 바꾸어서 이어 붙여보기
        var answer = ""
        
        let list = numbers.sorted { Int("\($0)\($1)")! >  Int("\($1)\($0)")!}
        answer = list.map { "\($0)" }.joined()
        if answer.first == "0" { answer = "0" }
        return answer
    }
}