알고리즘 - 프로그래머스 정수 내림차순으로 배치하기 (Swift)

2020. 7. 2. 16:56Algorism

반응형

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.제한 조건

  • n은 1이상 8000000000 이하인 자연수입니다.

네 이문제는 내부 함수를 사용하면 비교적 쉽게 정렬이 가능합니다.

 

그래도 중요한건 어떻게 정렬이 되고 다시 Int64타입으로 변환하는지 이해하는게 중요할 것 같네요.

 

아래 2가지 방법으로 문제를 해결할 수 있어요.

 

 

먼저 스트링 타입으로 변환이후에 map함수를 실행하면 Array<string.element>타입이 되기 때문에 join함수를 사용할 수가 없어요.

# string.element는 Charactertypealias Element = Character 즉 Character 타입입니다. 그래서 String의 함수를 사용할 수 가 없어요.

 

그래서 맵 함수 내부에서 String으로 형변환을 진행 이후 익숙한 sorted를 내림차순으로 진행하고

 

최종적으로 joined를 사용하여 문자열을 모두 붙여준 뒤에 Int64타입으로 형변환하여 리턴해주는 심플한!? 방법입니다.

func solution(_ n:Int64) -> Int64 {
   return Int64(String(n).map { String($0) }.sorted(by: >).joined())!
}

 

다른 방법은 위에 처럼 많은 함수를 사용하지않고 내부적으로 해결해 버립니다.

문자열로 변환 -> 정렬 -> 문자열로 형변환 -> 인트타입 형변환 매우 심플하조?

func solution(_ n:Int64) -> Int64 {
    return Int64(String(String(n).sorted(by: >)))!
}

 

 

1번은 문자열에 추가적으로 작업이 필요할 경우에 사용하면 될 것 같아요. 

2번째는 딱 저문제를 해결하기 위한 방법 같이 느껴지네요.

반응형