Algorithm Problem Solving/Programmers

[프로그래머스] 정렬 가장 큰 수 with Swift (모든 반례)

코코자장자장 2022. 1. 7. 09:34

안녕하세요! 오늘은 프로그래머스 2레벨 가장 큰 수 문제를 풀어보겠습니다!

이번 문제는 음... 반례를 못찾아 실수를 많이해서 시간이 오래걸렸는데요!

 

우선 반례를 제공해드릴테니 테스트 해보시기 바랍니다!

 

// 1-6 번 걸리시는 분

[3, 32] "332"

[3, 34] "343"

[0, 0, 1000, 1] "1100000"

[87, 878] "87887"                  <<<< 이 부분 꼭 확인하세요! 

[121, 1211, 12] "121211211"    <<<< 이 부분 꼭 확인하세요!

 

// 11번 걸리시는 분

[0, 0, 0, 0] "0"

 

처음에는 문제를 풀때 맨 앞의 숫자를 뒤에 덧붙여서 4자리숫자를 만들고 비교했는데요!

 

이 부분 꼭 확인하세요! 의 반례를 못찾아 맞왜틀만 외치고있었습니다! (부끄...)

 

local answer로 answer을 만들어갈 수 있는 문제이기 때문에 문제에서 주어진 방식으로 sort하면 문제가 해결됩니다!

 

우선 sort하기 쉽게 String배열로 맵핑해줍니다!

 

그 후 sort하는데요 방식은 string을 합쳐서 Int로 변환후 큰 수가 앞으로 오게 해주면 됩니다!

 

마지막으로 간단하게 reduce를 사용해 모든 string을 합쳐주면 문제를 해결할 수 있습니다!

import Foundation

func solution(_ numbers:[Int]) -> String {
    
    var answer = ""
    var stringNumbers:[String] = numbers.map({return String($0)})
    var sortedNumbers = stringNumbers.sorted(by:{
        (string1: String, string2: String) -> Bool in
        return Int(string1+string2)! > Int(string2+string1)!
    })
    answer = sortedNumbers.reduce("", {(string1: String, string2: String) -> String in
        return string1+string2})
    
    if let newAnswer = Int(answer) {
        return String(newAnswer)
    }
    
    return answer
}

 

오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!

 

감사합니다!