* 오류 지적, 오타, 내용 개선 댓글은 대환영입니다! 저도 초보니까요.
안녕하세요, 갓벨입니다. 이번에는 백준 온라인 저지 1008번, A/B로 찾아뵈었습니다.
1000번 [A+B], 1001번 [A-B], 10998번 [A*B]를 거쳐 오신 여러분들께 약간의 함정(?)이 될 수 있는 문제입니다. 물론, 자료형에 대한 이해가 잘 되어 있으시다면 한 방에 해결하실 수 있을 겁니다. 우선 문제를 보시죠.
문제
입력
출력
예제 입력 1
1 3
예제 출력 1
0.33333333333333333333333333333333
예제 입력 2
4 5
예제 출력 2
0.8
풀이
여태까지 했던 것처럼, 두 정수를 입력 받아 나누어 봅시다.
import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); } }
import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a / b); //a/b를 출력합니다. } }
이렇게 작성을 해 봅니다. 그런데...
9699548 | jjongha134 | 1008 | 틀렸습니다 | Java / 수정 | 245 B |
틀렸네요. 뭐가 문제인 걸까요?
입출력을 다시 볼까요? 지금 보니, 입력은 정수인데, 예시를 보면 출력이 0.333333... 처럼 소수입니다! int형으로는 소수를 나타낼 수 없으니 값이 다르게 나오는 거겠죠. int와 int끼리의 계산의 결과는 무조건 int니까요.
a와 b가 int여서는 안 되겠죠. 소수를 나타낼 수 있는 게 뭐가 있죠? 바로, double이 있습니다.
그러면 a와 b를 double로 해 주어야 합니다. 이때, nextInt()는 정수를 입력받는 메서드이므로 nextDouble을 써 줍시다. 나눗셈까지 해 버리면 다음과 같이 되겠군요.
import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); double a = sc.nextDouble(); double b = sc.nextDouble(); System.out.println(a/b); } }자료형에 대한 이해가 필요한 문제였습니다. 다음 문제에서 봅시다!
'예전글 > BOJ 단계별로 풀어보기' 카테고리의 다른 글
[백준][2단계][10430번] 나머지 (Java) : 사칙연산(6), 증명 (0) | 2018.09.03 |
---|---|
[백준][2단계][10869번] 사칙연산 (Java) : 사칙연산(5) (0) | 2018.09.02 |
[백준][2단계][10998번] A*B (Java) : 사칙연산(3) (0) | 2018.09.02 |
[백준][1단계][11719번] 그대로 출력하기 2 (Java) (0) | 2018.08.30 |
[백준][1단계][11718번] 그대로 출력하기 (Java) : NextLine() (0) | 2018.08.30 |