728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42746?language=swift
주어진 수를 조합하여 가장 큰 수를 만들어 내는 것이 목표이다.
정렬을 우선적으로 해야하는 것은 알았는데 비교를 하며 정렬하는 방법을 구현해내지 못했었다.
그래서 한참을 고민하다가 여러 블로그, 답안들을 보고 깨우쳤다...!
처음에는 두 자리 이상의 수를 한 자리까지 내려서 비교하고 정렬하려고 했는데, 그렇게 하면 timeout이 될 것 같았다.
그래서 아래의 방법으로 비교하며 정렬해주는 방식으로 풀게되었다.
var nums = numbers.sorted { Int("\($0)\($1)")! > Int("\($1)\($0)")!}
[ "8", "4" ] 가 주어졌다면, 48과 84를 비교할 수 있도록 해주는 것이다..!
\()안에 넣어서 문자열로 합치고, 그 이후 정수형으로 비교해주는 방식인 것이다. (왜 생각해내지 못했을까...)
아무튼 이렇게 정렬을 하고 예외처리를 해줘야 하는데, 배열의 가장 큰 값이 0인 경우이다.
이 경우 그냥 바로 "0"을 리턴해주면 된다. 문자열로 다루다보니 "000" 처럼 나오는 경우가 있는데 수를 이렇게 표기하진 않기 때문에 처리해준다!
import Foundation
func solution(_ numbers:[Int]) -> String {
let num = numbers.sorted { Int("\($0)\($1)")! > Int("\($1)\($0)")! }
if num[0] == 0 {
return "0"
}
return num.map {String($0)}.joined()
}
코드는 간략하지만, 아이디어가 필요한 문제였던 것 같다.
숫자여도 문자로 활용해보는 방식도 충분히 고려해볼 필요가 있을 것 같다.
sorted { $0 > $1 }
매번 이렇게만 써왔었는데, 이 처럼 상황에 맞게 쓸 수 있도록 혜안을 기르는 것이 중요한 것 같다..!
728x90
반응형