문제.
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.제한 사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
풀이.
// 인상깊은 풀이
func solution(_ n:Int64) -> Int64 {
let x = Int64(sqrt(Double(n)))
return (x * x == n) ? ((x + 1) * (x + 1)) : -1
}
// 나의풀이
func solution(_ n:Int64) -> Int64 {
let x: Int = 1
while x*x == n {
if x*x == n {
return Int64((x+1)*(x+1))
}
}
return -1
}
요구사항.
1. 일단 문제를 딱 보고나서 생각한것은 어차피 제곱근이니까 조건은 간단할꺼고 어떤 메서드같은게 있나 생각해 보는 것이였다.
2. 풀고나니 바로 보인것은 인상깊은 풀이였고, 이해가 되지 않았던 점은 Double을 꼭 써야 되나? 했는데 플레이 그라운드에 옮기자마자 오류가 뜨는 것을 보고 저렇게 해야 되는구나를 알았다.
3. sqrt. 기억해 두자.
'IOS > Swift Algorithm Level 1' 카테고리의 다른 글
Swift. 짝수와 홀수 (0) | 2020.10.28 |
---|---|
Swift. 제일 작은 수 제거하기 (0) | 2020.10.27 |
Swift. 정수 내림차순으로 배치하기 (0) | 2020.10.24 |
Swift. 자연수 뒤집어 배열로 만들기 (0) | 2020.10.23 |
Swift. 자릿수 더하기 (0) | 2020.10.22 |