코틀린에서 제곱 연산을 하려면 kotlin.math 패키지의 pow 연산을 쓰면 된다. pow 연산은 Double, Float 두 가지 자료형만 지원된다.
fun Double.pow(x: Double): Double
fun Double.pow(n: Double): Double
println(2.0.pow(3.0)) // 8.0
println(2.0.pow(3)) // 8.0
Float 자료형은 Float이나 Int를 인자로 받아 제곱 연산을 수행하며 반환 자료형은 모두 Float이다.
fun Float.pow(x: Float): Float
fun Float.pow(n: Int): Float
println(2.0f.pow(3.0f)) // 8.0
println(2.0.pow(3)) // 8.0
println(2.toDouble().pow(3)) // 8.0
println(sqrt(4.0)) // 2.0
제곱(pow) 연산을 활용해 제곱근, 세제곱근도 구할 수도 있다. 1/2, 1/3 제곱 연산으로 수행 가능
val number = 4.0
val squareRoot = number.pow(1.0 / 2.0) // 2
val number = 27.0
val cubeRoot = number.pow(1.0 / 3.0) // 3
import kotlin.math.*
class Solution {
fun solution(n: Long): Long {
val i = sqrt(n.toDouble()).toLong()
if(i*i == n) {
return (i+1).toDouble().pow(2).toLong()
}
return -1
}
}
코틀린의 수학 함수를 쓰기 위해서 import kotlin.math.*
제곱근 함수 sqrt를 쓰기 위해서 toDouble로 자료형 변환해서 n을 제곱근 하고 다시 원래의 자료형 toLong으로 변환.
n의 제곱근 i가 제곱이 되었을때 n과 같으면 ( i+1 ) ** 2가 되도록 코틀린의 문법으로 풀어서,
pow를 쓰기 위해 toDouble로 변환해서 pow() 사용하고 다시 원래의 toLong으로.
아니면 -1 반환.
다른 사람의 풀이
class Solution {
fun solution(n: Long): Long {
val a = sqrt(n.toDouble()).toLong()
return if (a * a == n) (a + 1)*(a + 1) else -1
}
}
class Solution {
fun solution(n: Long): Long {
val sqrt = sqrt(n.toDouble())
return if(sqrt % 1.0 == 0.0) {
(sqrt + 1).pow(2.0).toLong()
} else {
-1L
}
}
}
참고:
https://stackoverflow.com/questions/47846653/unresolved-reference-sqrt-kotlin