VesselWheel

정수 내림차순으로 배치하기 본문

Coding Test Practice in Swift

정수 내림차순으로 배치하기

JasonYang 2023. 11. 21. 11:52

 

// Int64 타입의 매개변수 n을 받아서, 

func solution(_ n:Int64) -> Int64 {
    //정수 n을 String으로 변환 후 내람차순으로 sorted(by: >) 정렬한 후 정렬된 문자열(String)으로 정렬 한 후 이를 Int값으로 가장 높은 숫자에서 낮은 숫자 순으로 재정렬
    return Int64(String(String(n).sorted(by: >)))!

// 재정렬된 문자열을 Int64 숫자로 변환하며  함수 내부값 강제해제(!)
}

 

solution(3252) // 결과값 5322

 

 

/* 문법 Tip 옵셔널 강제해제 !

옵셔널을 강제 해제하는 방법은 옵셔널 타입의 값 뒤에 "!"만 붙여주면 됩니다. 이 "!"를 강제 해제 연산자라고 합니다.
 
var optInt: Int? = 3
 
 
 
print("옵셔널 자체의 값 : \(optInt)") // 옵셔널 자체의 값 : Optional(3)
 
print("!로 강제 해제한 값 : \(optInt!)") // !로 강제해제한 값 : 3
 
이처럼 옵셔널 자체의 값은 Optional()로 감싸지고, 값이 있을 때 강제 해제를 하면 내부의 값이 추출됩니다.
 
Int("123")! + Int("123")! // 246
 
Int("123")! + 30 // 153
 
이렇게 옵셔널을 해제하여 연산이 가능합니다. 하지만 nil일 때 "!"을 사용하면 오류가 발생합니다. 즉 강제 해제 연산자를 사용할 때는 옵셔널 값이 nil인지 체크가 필요합니다. nil이 아닐 때만 강제 추출해야 합니다.
 
var str = "123"
 
var intFromStr = Int(str)
 
 
 
if intFromStr != nil {
 
print("변환된 값은 \(intFromStr!)입니다")
 
} else {
 
print("값 변환에 실패하였습니다")
 
}
 
"123"은 Int 타입으로 변환이 가능하므로 intFromStr에는 Optional(123)이 담겨 있습니다. 즉 if 조건절에서 nil이 아니므로 if 구문이 실행됩니다.
 
변환된 값은 123입니다
 
 
만약 숫자 변환 불가능한 값이 들어가면 어떻게 될까요?
 
var str = "Swift"
 
var intFromStr = Int(str)
 
 
 
if intFromStr != nil {
 
print("변환된 값은 \(intFromStr!)입니다")
 
} else {
 
print("값 변환에 실패하였습니다")
 
}
 
입력된 문자열은 숫자로 변환 불가능하므로 intFromStr에는 nil이 담겨 있습니다. if 조건절이 거짓이므로 else 구문이 실행됩니다.
 
값 변환에 실패하였습니다
 
위 조건절에서 intFromStr과 nil 사이에 "!=" 연산자 앞뒤로 공백이 있는 것을 알 수 있습니다. 이것은 가독성을 위한 것이 아닙니다. 문법 오류를 방지하기 위한 목적입니다. 만약 공백을 두지 않으면 두 가지 경우로 해석 가능합니다.
 
intFromStr!=nil
 
// 해석1
 
(intFromStr)!=(nil)
 
// 해석2
 
(intFromStr!)=nil
 
해석1은 원래 의도대로 intFromStr 변수와 nil의 비교입니다. 해석2는 intFromStr 변수의 옵셔널 강제 해제 + nil 값의 할당입니다. 즉 해석의 차이가 발생하여 구문이 모호해질 수 있습니다. 컴파일러는 이를 확실하게 해석하지 못해 오류가 발생합니다. 따라서 공백을 주어야 합니다.

*/

'Coding Test Practice in Swift' 카테고리의 다른 글

콜라츠 추측  (0) 2023.11.22
두 정수 사이의 합 with reduce 함수  (1) 2023.11.21
정수 제곱근 판별  (0) 2023.11.21
자연수 뒤집어 배열로 만들기  (1) 2023.11.14
x만큼 간격이 있는 n개의 숫자  (0) 2023.11.14