안녕하세요, 성조입니다.
이번 포스팅은 자바 11 버전으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/1312
1312번: 소수
피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.
www.acmicpc.net
문제
피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소수점 아래 N번째 자릿수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.
입력
첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다.
출력
A÷B를 했을 때, 소수점 아래 N번째 수를 출력한다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text[] = br.readLine().split(" ");
double A = Double.parseDouble(text[0]);
double B = Double.parseDouble(text[1]);
int decimalSeparator = Integer.parseInt(text[2]);
double res = A%B;
for(int i=1; i<decimalSeparator;i++) {
res *= 10;
res %= B;
}
System.out.println( (int)((res/B)*10) );
}catch(IOException e) {
System.out.println("error");
}
}
}
풀이
이번 문제는 출력에 나온 그대로를 구현하면 된다.
A ÷ B를 했을 때, 소숫점 아래 N번째 수를 출력하는 문제이다.
예제 입력을 확인한다.
예제 입력을 보면 다음과 같다.
[25 = A, 7 = B, 5 = N번째]
몫을 구하는 연산자 '/'와 나머지를 구하는 연산자 '%'를 풀면서 한번 더 정리하면 좋겠다 생각했다. 그래서 아래의 그림을 만들었다.
A /(몫) B로 구한 경우 3.571428...의 값이 나오며, A %(나머지) B로 구한 경우 4.0의 값이 나온다.
출력에서 구현 조건은 대부분 나와있었다.
연산을 진행하면 A(25) ÷ B(7) = 3.571428...로 나온다.
A/B 이후 소수점 N번째(5번)를 찾아내야 한다. 3.571428
5번째 위치에 있는 소수점 2가 있는 위치를 찾아내기 위해서 다음의 자바코드를 그림으로 그렸다.
for(int i=1; i<decimalSeparator;i++) {
res *= 10;
res %= B;
}
N번째가 1인 경우.
N번째가 2인 경우.
N번째가 3인 경우.
N번째가 4인 경우.
N번째가 5인 경우.
이제 이 결과에 나온 2를 출력하면 된다. 하지만 0.28의 값을 출력하기 위해서 A/B를 연산자를 사용하지 않고, '%' 나머지 연산자를 활용하여 값을 가져온다.
res(피제수 = 나누어지는 값) / B(제수 = 나누는 값)의 연산을 통하여 몫 값을 가져온다.
다시 정리하면 다음과 같다.
- '%' 나머지 연산을 통해서 소수점 자리의 값을 가져온다.
- '/' 몫 연산을 통해서 0.n번 자리에 존재하는 값을 가져온 다음 10을 곱하여 첫 번째 자리 수로 만든다.
- int 형으로 만들어서 자리 수 값을 정수형으로 출력한다.
오타나 이해가 안 가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Java' 카테고리의 다른 글
[백준 - 3009][Java] 네 번째 점 (0) | 2023.01.12 |
---|---|
[백준 - 1427][Java] 소트인사이드 (0) | 2023.01.11 |
[백준 - 1032][Java] 명령 프롬프트 (0) | 2023.01.07 |
[백준 - 4673][Java] 셀프 넘버 (0) | 2023.01.02 |
[백준 - 10886][Java] 0 = not cute / 1 = cute (0) | 2022.12.28 |