🔴 문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항: n은 1이상, 50000000000000 이하인 양의 정수입니다.
🔵 풀이
이번 문제는 'sqrt(_:) 함수만 알고 있으면 풀기 쉽다.
단, sqrt(_:)를 사용하려면 Foundation 프레임워크를 import해야한다.
import Foundation
func solution(_ n: Int64) -> Int64 {
let x: Int64 = Int64(round(sqrt(Double(n))))
if x * x == n {
return (x + 1) * (x + 1)
} else {
return -1
}
}
sqrt(_:)와 squareRoot()의 차이점
#14. 약수의 합에서는 제곱근을 구할 때 squareRoot를 사용했었는데, sqrt와 squareRoot의 차이점은 다음과 같다.
구분 | sqrt(_:) | squareRoot() |
종류 | global function | FloatingPoint의 메소드 |
사용방법 | let number = 25.0 let result = sqrt(number) print(result) // prints 5.0 |
let number: Double = 25.0 let result = number.squareRoot() print(result) // prints 5.0 |
🔵 풀이 개선 - Ternary conditional operator 사용
if문은 Ternary conditional operator (조건식 ? True일 때 값 : False일 때 값)로 간결화할 수 있다.
import Foundation
func solution(_ n: Int64) -> Int64 {
let x: Int64 = Int64(round(sqrt(Double(n))))
return (x * x == n) ? (x + 1) * (x + 1) : -1
}
'Swift > Code Kata (알고리즘)' 카테고리의 다른 글
[Swift|코드카타] (프로그래머스) 입문 #21. 하샤드 수 - reduce (0) | 2024.02.16 |
---|---|
[Swift|코드카타] (프로그래머스) 입문 #20. 정수 내림차순으로 정렬하기 - sort(), sorted() (0) | 2024.02.15 |
[Swift|코드카타] (프로그래머스) 입문 #18. 문자열을 정수로 바꾸기 (0) | 2024.02.14 |
[Swift|코드카타] (프로그래머스) 입문 #17. 자연수 뒤집어 배열로 만들기 - compactMap, reversed(), hexDigitValue, wholeNumberValue (1) | 2024.02.14 |
[Swift|코드카타] (프로그래머스) 입문 #16. x만큼 간격이 있는 n개의 숫자 - map 함수 (1) | 2024.02.09 |