안녕하세요! 오늘은 프로그래머스 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
}
오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!
감사합니다!
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 탐욕법(Greedy) 조이스틱 with Swift (0) | 2022.01.11 |
---|---|
[프로그래머스] 소수 찾기 with Swift (0) | 2022.01.10 |
[프로그래머스] 스택/큐 프린터 with Swift (0) | 2022.01.05 |
[프로그래머스] 월간 코드 챌린지 시즌3 빛의 경로 사이클 with Swift (0) | 2022.01.04 |
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 튜플 with Swift (0) | 2022.01.03 |