수를 입력받아 제곱근 값을 소수접 두 자리까지 리턴해야 합니다.
인자 1: num
이 문제는 꽤나 전에 수학문제로 포기했던 문제이다.
하지만 지금은 풀 수 있지 않을까 싶은 마음에 재도전해본다.
먼저 제곱근은 제곱의 반대 개념으로 "제곱하여 그 수가 되는 수" 를 말한다.
즉, 위 문제는 9를 입력받았다면 3을 리턴하라는 말인데 최대소수점 둘째자리까지 구해라라는 조건이 붙었다.
둘째자리까지 구하라는 것은 셋째자리에서 반올림을 하라는 이야기이다.
Math.sqrt 없이 어떻게 제곱근을 구해야하나 고민하던 중 바빌로니아 법의 점화식 있다는 것을 알았다.
바빌로니아 법 (The Babylonian Method)
이라고 한다.
그래서 내가 이해한것과 맞게 식을 구성해봤다.
double multi = 1; // (1)
int count = 0;
while (true) { // (2)
if (multi * multi == num) { // (2-1)
return String.format("%.2f", multi);
} else if (multi * multi > num) { // (2-2)
multi -= 1;
break;
}
multi++;
}
while (true) { // (3)
count++;
if(count == 3) {
return String.format("%.2f", multi);
}
multi = (multi + (num / multi)) / 2;
}
근사값을 multi로 선언했다. count는 (3)반복문에서 쓰일 예정이다.
근사값을 제곱하며 num과 같거나 num보다 큰 근접한 수가 될 때까지 반복문을 실행한다.
2-1. 근사값의 제곱이 num과 같은 수가 됐다면 String.format()메서드를 이용하여 소수점 둘째자리까지 나타내도록 하였다.
즉, 근사값이 3이 되었다면 3.00으로 변환시켜주는 것이다.
2-2. 근사값의 제곱이 num보다 커지면 근사값의 제곱에서 1을 뺀 수를 갖고 반복문을 벗어난다.
바빌로니아 법의 점화식이 실행되는 반복문이다.
반복문이 한번 돌때마다 count가 1씩 더해지고 count가 3이 되면 반복문은 종료된다.
count가 3이 되면 종료되는 이유는 소수점 셋째자리에서 반올림을 해주어야하기위함이다.
multi = (multi + (num / multi)) / 2;
이 식이 바로 바빌로니아 법의 점화식을 응용한 식이다.
위와 같이 구성했더니 원했던 결과가 나왔다.
프로그래밍을 배우다가 수학까지 배우고있으니 일석이조인거라고 생각하자!!
그렇게 오늘도 뿌듯함 적립!!