Archive/Questions

[programmers/Swift] 가장 큰 수

Marco 2022. 5. 10. 18:51
728x90

programmers.co.kr - 코딩테스트연습 - Lv.2 - 정렬 - 가장 큰 수

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

Constraints :

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

Solution.swift :

//
//  Created by Yongwoo Marco on 2022/05/10.
//  Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//

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

print(solution([6, 10, 2])) // "6210"
print(solution([3, 30, 34, 5, 9])) // "9534330"

How I tried this :
처음 아이디어는 모든 경우의수를 순열을 이용해서 찾은뒤 정렬하는 구현이었는데

역시 시간초과가 나왔다.

 

두번째 아이디어는 sorted 클로저를 계산해보려했는데

"34" "3" "30" 세가지를 줄세울때 "34330" 이 나오질 않았다..

 

sorted 클로저가 일일이 길어지는것보다 $0, $1 또는 lhs rhs 값을 주는 이유가

두 값을 비교하며 처리한다는 점을 바로 이용했다. "343" "334" 직접 비교해보는 형태로 구현했다.

문제에 관한 모든 저작권 : https://programmers.co.kr/

728x90