문제설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
진행
반복문을 사용해서 1부터 n까지 반복해야 할까?
i를 차근차근 올린뒤 i의 값과 입력값을 나눈 값이 같아지면 구해지긴할것이다
근데 이건 계산이 너무 오래걸리지않나?
sqrt()함수를 사용하면 반복문 없이 계산이 가능하다
일단 입력된 값의 제곱근을 정의하자
var result = sqrt(n.toDouble())
제곱근이 구해졌다해서 끝이아니다 정수를 구해야하는데
sqrt는 데이터타입이 double임으로 소숫점까지 생각해서 제곱근을 구했을것이다
정수만 구해야함으로 %연산자를 써서 제곱근으로 나눳을때 0이나오면 연산이 되도록하자
if (n % result == 0.0){
answer = Math.pow(result+1.0, 2.0).toLong()
}
else answer = -1
코드
package com.example.codekata
import kotlin.math.sqrt
fun main() {
while (true) {
println("숫자 입력:")
var n = readln().toLong()
if (n < 1){
println("1이상이어야 합니다")
}else if (n > 50000000000000){
println("숫자가 너무큽니다")
}
println("${solution(n)}")
}
}
fun solution(n: Long): Long {
var answer: Long = 0
var result = sqrt(n.toDouble())
if (n % result == 0.0){
answer = Math.pow(result+1.0, 2.0).toLong()
}
else answer = -1
return answer
}
결과