처음에는 n을 root한 값을 num(Double형)이라고 했을 때
num * num이 n과 같은지 비교해서 같으면 num + 1을 제곱해서 리턴하고 아니면 -1을 리턴하게끔 코드를 짜고 돌렸으나 3 가지 테스트케이스에서 fail이 뜨길래 다른 방식으로 시도해서 통과했다.
어떻게 통과했냐면 일단 sqrt한 값을 double 한다면 제곱근이 없는 숫자인 경우 무조건 소수점 이하의 수가 남을 수밖에 없기 때문에
Double(n)의 squareRoot() 에서 Double(n)의 floor() 값을 뺀 값이 0보다 큰지 확인하는 것이다.
생각해보라. 제곱근이 있는데 소수점 이하값이 0보다 클리가 없지 않은가.
정답코드:
import Foundation
func solution(_ n:Int64) -> Int64 {
var num = Double(n).squareRoot()
if num - floor(num) > 0 {
return -1
} else {
num = num + 1
return Int64(num * num)
}
}
'Algorithm' 카테고리의 다른 글
프로그래머스 - 5주차[Swift] (0) | 2021.09.06 |
---|---|
프로그래머스 크레인 인형뽑기 게임 [Swift] (0) | 2021.09.03 |
프로그래머스 [Swift] 제일 작은 수 제거하기 (0) | 2021.07.05 |
프로그래머스 [Swift] 문자열 내 마음대로 정렬하기 (0) | 2021.07.03 |
프로그래머스 - 최대공약수와 최소공배수 [Swift] (0) | 2021.07.03 |
최근댓글