본문 바로가기

예전글/BOJ 단계별로 풀어보기

[백준][2단계][1008번] A/B (Java) : 사칙연산(4), Double




 * 오류 지적, 오타, 내용 개선 댓글은 대환영입니다! 저도 초보니까요.


 안녕하세요, 갓벨입니다. 이번에는 백준 온라인 저지 1008번, A/B로 찾아뵈었습니다.

 1000번 [A+B], 1001번 [A-B], 10998번 [A*B]를 거쳐 오신 여러분들께 약간의 함정(?)이 될 수 있는 문제입니다. 물론, 자료형에 대한 이해가 잘 되어 있으시다면 한 방에 해결하실 수 있을 겁니다. 우선 문제를 보시죠.

문제


  두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력

 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10) 

출력

 첫째 줄에 A/B를 출력한다. 절대/상대 오차는 10-9 까지 허용한다.

예제 입력 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를 출력합니다.     } }

이렇게 작성을 해 봅니다. 그런데...

9699548jjongha1341008틀렸습니다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);
    }
}

자료형에 대한 이해가 필요한 문제였습니다. 다음 문제에서 봅시다!