알고리즘/프로그래머스

프로그래머스 - 가장 큰 수

leeyuno 2020. 12. 23. 14:40

 

내가 푼 방식

먼저 내가 푼 방식은 배열안의 숫자를 반복해서 4자리 이상을 만들어 주고

그 문자열끼리 비교해고 붙여서 최종 문자열을 출력하였는데

 

마지막 테스트케이스 11번이 오류가 나서 확인해보니 [0, 0, 0, 0]이 입력될때 "0000"을 출력해주는 문제가 있어

마지막에 0만 비교를 해주는 조건을 걸었다.

func solution(_ numbers:[Int]) -> String {
	var result: String = ""

    var array = [[String]]()

    numbers.forEach {
        var arr = [String]()
        var i = 5
        var string = String($0)
        while i > 0 {
            string += String($0)
            i -= 1
        }
        arr.append(String($0))
        arr.append(String(string[string.startIndex ..< string.index(string.startIndex, offsetBy: 4)]))

        array.append(arr)
    }

    array.sorted {
        $0[1] > $1[1]
    }.forEach({
        result.append($0[0])
    })

    if Int(result) == 0 {
        return "0"
    } else {
        return result
    }
}

 

풀고 나서 본 다른분들이 푼 방식

 

좋아요를 많이 받은 분의 방식을 보니 문자열을 처음부터 두개씩 붙여가면서 바로바로 큰 값을 체크하셨다.

대단쓰...!👍

func solution(_ numbers:[Int]) -> String {
    let sortedNumber = numbers.sorted {
        return Int("\($0)\($1)")! > Int("\($1)\($0)")!
    }
    
    let result = sortedNumber.map { String($0) }.reduce("") { $0 + $1 }
    
    return result.first == "0" ? "0" : result
}