반응형
Level 1 연습문제
정수 제곱근 판별
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예시
print(solution(121)) //144
print(solution(3)) //-1
내답안
func solution(_ n:Int64) -> Int64 {
for i in 1...n {
if i*i == n { return (i+1)*(i+1) }
if n < i*i { return -1 }
}
return 0
}
i 가 n까지 갈 일은 없으니까 어짜피 그전에 리턴을 해버릴거니까 i += 1 하기 귀찮아서 그냥 for문으로 돌려버렸는데, 의미없는 n까지 반복문을 돌리는게 좋은 방법은 아니란걸 안다. 리턴 경우의 수가 세가지나 되는 것도 별로고..
이를 보완해 다음과 같이 만들어주니 훨씬 간결하고 좋은 것 같다. while true 가 아니라 i*i < n 일때까지 i++ 해주고 그다음에 바로 리턴해버리니 if문도 안써도 되고 아주 간결하고 좋아보인다.
보완답안
func solution(_ n:Int64) -> Int64 {
var i:Int64 = 1
while i*i < n {
i += 1
}
return (i*i == n) ? (i+1)*(i+1) : -1
}
sqrt 사용답안
import Foundation
func solution(_ n:Int64) -> Int64 {
let t = Int64(sqrt(Double(n)))
return t * t == n ? (t+1)*(t+1) : -1
}
sqrt : Returns the square root of each element in a vector.
squareRoot()
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Swift 알고리즘] Programmers 나누어 떨어지는 숫자 배열 (0) | 2022.01.14 |
---|---|
[Swift 알고리즘] Programmers 최대공약수와 최소공배수 (0) | 2022.01.13 |
[Swift 알고리즘] Programmers 행렬의 덧셈 (0) | 2022.01.12 |
[Swift 알고리즘] Programmers 직사각형 별찍기 (0) | 2022.01.10 |
[Swift 알고리즘] Programmers 콜라츠 추측 (0) | 2022.01.10 |