-
[Swift] 가장 큰 수 코딩테스트 프로그래머스개발/Swift 2022. 1. 17. 18:16
배열을 결국 잘 정렬 하면 되는 문제다.
결국 가장 큰수를 만들기 위해서는 정렬 할때
두숫자의 조합을 비교해 더큰수를 기준으로 정렬하면 되는것이다.
예를 들어 30, 34 를 비교할떄
3034 vs 3430
이렇게 두수를 합쳐서 비교하면 정렬이 완성된다.
단지 “0000” 인경우를 예외로 두면 된다.
func solution(_ numbers:[Int]) -> String { var sortedNumbers = numbers.sorted { (num1, num2) -> Bool in return Int("\\(num1)\\(num2)")! > Int("\\(num2)\\(num1)")! } if(sortedNumbers[0]==0){ return "0" } let result = sortedNumbers.reduce("") { (res, num) -> String in return "\\(res)\\(num)" } return result }
실패한 문제해결법
문제 해결을 위해서 배열을 정렬을 해야하는데 정렬 하기위한 룰을
이렇게 설정하면 가장 큰수가 나올것이다.
- 수의크기(길이) 를 무시하고 첫번째 자리 수가 큰 순으로 정렬한다.
- ex> 7 > 59
- 첫자리수가 같을때는 이순서대로 정렬한다.
- 두번째 자리수를 비교하여 큰값을 앞으로 정렬
- 비교할 수중 두번쟤 자리수가 없으면 앞자리 사용 ( 3 vs 34 → 33 vs 34)
- 1000까지 이므로 결과가 계속 안나면 세번쟤 자리까지 반복
- 세번쨰까지 같으면 냅둠
func solution(_ numbers:[Int]) -> String { var sortedNumbers = numbers.sorted { (num1, num2) -> Bool in var arr1 = makeArray(num: num1) var arr2 = makeArray(num: num2) if(arr1[0] == arr2[0]){ if(arr1.count<2){ arr1.append(arr1[0]) } if(arr2.count<2){ arr2.append(arr2[0]) } if(arr1[1]==arr2[1]){ if(arr1.count<3){ arr1.append(arr1[1]) } if(arr2.count<3){ arr2.append(arr2[1]) } if(arr1[2]==arr2[2]){ return false }else{ return arr1[2]>arr2[2] } }else{ return arr1[1]>arr2[1] } }else{ return arr1[0] > arr2[0] } } var result = "" for i in 0..<sortedNumbers.count { result += "\\(sortedNumbers[i])" } return result } func makeArray(num:Int) -> [Int]{ let str = "\\(num)" return str.compactMap{$0.wholeNumberValue} }
'개발 > Swift' 카테고리의 다른 글
[Swift] 카펫 프로그래머스 코딩테스트 (0) 2022.01.28 [Swift] 소수 찾기 코딩테스트 프로그래머스 (0) 2022.01.25 [Swift] 이준 우선 순위 큐 프로그래머스 코딩테스트 (0) 2022.01.13 [Swift] 다리를 지나는 트럭 프로그래머스 코딩테스트 (0) 2022.01.09 [Swift] 프린터 프로그래머스 코딩테스트 (0) 2022.01.06 - 수의크기(길이) 를 무시하고 첫번째 자리 수가 큰 순으로 정렬한다.