임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
class Solution {
fun solution(n: Long): Long {
var x : Long = 1
while(x*x < n) {
x++
}
return if(n==(x*x)){
(x+1)*(x+1)
}
else{
-1
}
}
}
일단 x를 1부터 시작해서 맞는 수가 나올때까지 1씩 올려주고
x의 제곱이 n이랑 같으면 x+1의 제곱을 반환하고
그렇지 않으면 -1을 반환하게 했음
근데 이게 어떤 때 쓰이는지 궁금해졌음
제곱근을 구해야하는 상황은 언제인지?? 왜냐면 나는 평소에 제곱을 쓸 일이 없어서..
너무 오랜만에 만난 제곱이라 언제 쓰이는지 궁금해짐!
그래서 chat GPT 에게 물어봤다.
많은 수학 문제에서는 수의 제곱근을 찾는 것이 핵심입니다. 예를 들어, 원의 반지름을 구하거나, 피타고라스 정리를 이용하여 직각 삼각형의 빗변을 구할 때 제곱근을 사용합니다.
컴퓨터 그래픽스에서는 거리를 계산할 때 제곱근을 자주 사용합니다. 예를 들어, 두 점 사이의 유클리드 거리를 계산하려면 제곱근이 필요합니다. 이는 다양한 그래픽 알고리즘에서 중요한 역할을 합니다.
fun distance(x1: Double, y1: Double, x2: Double, y2: Double): Double {
val dx = x2 - x1
val dy = y2 - y1
return kotlin.math.sqrt(dx * dx + dy * dy)
}
통계학에서 표준 편차를 계산할 때 제곱근을 사용합니다. 표준 편차는 데이터가 평균으로부터 얼마나 분포되어 있는지를 나타내는 지표입니다.
fun standardDeviation(data: List<Double>): Double {
val mean = data.average()
val variance = data.map { (it - mean) * (it - mean) }.average()
return kotlin.math.sqrt(variance)
}
물리학과 공학에서는 제곱근을 사용하여 다양한 계산을 수행합니다. 예를 들어, 운동 에너지 계산, 파동의 진폭 계산, 신호 처리 등에서 제곱근이 사용됩니다.
fun kineticEnergy(mass: Double, velocity: Double): Double {
return 0.5 * mass * velocity * velocity
}
금융 분야에서는 복리 계산, 리스크 분석 등에서 제곱근을 사용합니다. 예를 들어, 변동성 계산에서 제곱근이 사용됩니다.
fun compoundInterest(principal: Double, rate: Double, time: Double): Double {
return principal * kotlin.math.pow(1 + rate / 100, time)
}
게임 개발에서도 제곱근을 많이 사용합니다. 예를 들어, 게임 캐릭터 간의 거리 계산, 충돌 감지, 물리 엔진 등에서 제곱근이 사용됩니다.
fun isCollision(x1: Double, y1: Double, x2: Double, y2: Double, radius1: Double, radius2: Double): Boolean {
val distance = distance(x1, y1, x2, y2)
return distance <= (radius1 + radius2)
}
제곱근을 계산하는 것은 매우 다양한 분야에서 필수적인 도구이며, 각 분야의 다양한 문제를 해결하는 데 중요한 역할을 합니다.
뭐 그렇다고 함… 내가 모를만한 이유가 있었다.
수학문제 풀 일 없고.. 통계랑 데이터 분석도 할 일 없고..물리학과 공학..? 배운적도없고..
금융..몰라.. 게임개발에 쓰인다는거만 유용했다~ 나중에 게임개발도 배우고싶음!
class Solution {
fun solution(n: Long): Long {
val sqrt = Math.sqrt(n.toDouble())
return if(sqrt % 1.0 == 0.0) {
Math.pow(sqrt + 1, 2.0).toLong()
} else {
-1L
}
}
}
나도 이렇게 .pow랑 sqrt 함수를 이용해서 풀고 싶었는데
타입 맞추기가 어려워서 포기했는데 또 이렇게 정답지를 보면 그렇게 간단해 보일 수가 없다.
sqrt 함수랑 .pow 함수는 공부를 해봐야 할듯! 아직은 어렵다.
class Solution {
fun solution(n: Long): Long {
for (i in 0..n) {
if (i * i == n) {
return ((i + 1) * (i + 1))
}
}
return -1
}
}
나랑 비슷하게 푸신 것 같은데 while대신 for문을 사용한 경우
이번엔 while로 풀었지만 뭔가 for문이 더 익숙하고 쉽게 느껴짐!