SEB/Daily Coding
[DailyCoding] 17 | computeSquareRoot
kexon
2022. 8. 12. 13:08
✏️ Description
수를 입력받아 제곱근 값을 소수점 두 자리까지 리턴
- 입력: int 타입의 정수 (num >= 2)
- 출력: String
- 최대 소수점 둘째 짜리까지 구한 수를 문자열로 변환하여 출력합니다. (소수점 셋째 자리에서 반올림)
- 입출력 예시
String output = computeSquareRoot(9); // --> "3.00"
output = computeSquareRoot(6); // --> "2.45"
- 힌트
- 소수점 처리는 java 표준 내장 객체인 String를 사용 (java decimal places limit 또는 자바 소수점 자리수)
- 바빌로니아 법의 점화식(recurrence formula)
https://ko.wikipedia.org/wiki/바빌로니아_법
📝 Flow
1. 소수점 3자리부터 반올림
- 배열에 소수점 자리만큼 double값을 선언 및 할당
2. 선언한 배열을 순회 => for
2-1. 초기값을 곱했을때, 입력된 값보다 작다면
- 기본값에 배열의 인자(소숫점 초기값)을 더해주고 => while
2-2. 모두 더한 값이 입력된 num과 일치하면
- 소수점 2자리까지의 값을 String값으로 변환하여 리턴 => String.format
- 기본 값에서 배열의 인자를 제외
(제외해야 배열의 인자가 바뀌고, while문이 정상적으로 순회가 가능)
3. 소수점 2자리까지의 값을 String값으로 변환하여 리턴 => String.format
👩🏻💻 Implementation
double[] diffs = new double[]{1, 0.1, 0.01, 0.001};
double base = 1;
for (double diff : diffs) {
while (base * base < num) {
base = base + diff;
}
if (base * base == num) return String.format("%.2f", base);
else base -= diff;
}
return String.format("%.2f", base);