728x90
문제를 풀다가... 중간에 정렬과 관련된 지식들을 몇가지 구글링했는데... 내가 상당히 어렵게 문제를 돌아가고 있다는 것을 발견했다.
그래서 힌트를 기반으로 문제해결..! 약간 찜찜하지만 나중에 다시 한 번 봐야겠다!
문제는 결국 어떤 수가 합쳐졌을 때 더 큰 수가 되는지 그리고 너무 큰 수가 나올 수 있기에 Int가 아닌 String으로 반환해야 한다는 것을 고려하면 된다.
이 문제를 풀면서 생각한 논리적 흐름
- 첫번째 원소와 두번째 원소를 붙였을 때 어떤 순서로 붙이는지에 따라 크기를 비교한다. 첫번째가 앞으로 오는 경우, 두번째가 앞으로 오는 경우 이렇게 두 가지의 경우를 비교하고 큰 수가 나오는 경우에 맞게 원소의 위치를 정렬한다.
- 이 과정을 모든 원소를 기반으로 진행하면(sorted가 알아서 진행해줌...) 끝
- 단지 0만 나오는 배열의 경우... 0, 00, 000... 이런식으로 답이 반환될 수 있으므로 맨 앞자리에 0이 왔다면 배열의 모든 원소가 0이라는 것을 고려해야한다.
- 이 부분만 고려하여 String으로 join시켜주면 끝
* 코드
func solution(_ numbers: [Int]) -> String {
let numbersSorted: [Int] = numbers.sorted { Int(String($0) + String($1))! > Int(String($1) + String($0))! }
if numbersSorted[0] == 0 {
return "0"
}
return numbersSorted.map{String($0)}.joined()
}

정리(Today I Learned)
1. sort를 사용할 때 클로저를 많이 사용하게 되는데... 아직까지도 클로저가 익숙하지 않아서 활용 퀄리티가 너무 낮은거 같다... ㅠㅠ 클로저 연습을 어떻게 하면 더 많이 할 수 있을까..! 클로저 연습 더 해보잣!
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 쿼드압축 후 개수 세기 (0) | 2023.01.25 |
---|---|
프로그래머스 Lv. 2 Swift 알고리즘 - 소수 찾기 (0) | 2023.01.24 |
프로그래머스 Lv. 2 Swift 알고리즘 - 다리를 지나는 트럭 (0) | 2023.01.22 |
프로그래머스 Lv. 2 Swift 알고리즘 - 2개 이하로 다른 비트 (0) | 2023.01.21 |
프로그래머스 Lv. 2 Swift 알고리즘 - 모음 사전 (0) | 2023.01.20 |