본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-1008(A/B)

반응형

문제(출처)

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


입력

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


출력

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


예제 입력1

1 3


예제 출력2

0.33333333333333333333333333333333


예제 입력1

4 5


예제 출력2

0.8


내 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        try {
            
//          Test case1
            /*
            String[] str = br.readLine().split(" ");
            double num1 = (Double.parseDouble(str[0])) ;
            double num2 = (Double.parseDouble(str[1])) ;
            int result = (int)((num1 / num2) * 1000000000);
            
            bw.write(String.valueOf((double)result/1000000000));
            bw.flush();
            bw.close();
            */
//          Test case2
            String[] str = br.readLine().split(" ");
            double num1 = (Double.parseDouble(str[0]));
            double num2 = (Double.parseDouble(str[1]));
            double result = (num1 / num2);
            System.out.printf("%.9f", result);
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}


내 풀이 해석

Test case1은 C++에서 풀었던 방법으로 Java에서 풀어보았습니다.
소수점 9자리 아래는 버리기 위해 상수를 곱해주고 다시 상수로 나눠주는 방법입니다.
문제점은 자리수가 오버플로우 되면 쓰레기 값으로 변경 됩니다. 그래서 틀렸다고 나오는 것 같습니다.
Text case2로 출력 형태만 변경하여 풀이하여 제출했고 정답을 맞추었습니다.
4 5의 0.8이 아니라 0.800000000 소수점이 나오는데 맞다니 좀 이상했습니다.

아쉬운 점

오랜만에 JAVA API를 봤습니다.
JAVA API보다 구글 검색이 더 편합니다.


학습/검색

1. Math.round(반올림)
class round {
public static void main(String[] args) {
System.out.println(Math.round(12.345*100)/100.0);
}
}


2. System.out.printf(반올림)

System.out.printf("%.2f", 12.3456); //결과값 12.35


3. String.format(반올림)

double d = 0.56789
String str = String.format("%.2f", fd;
System.out.println("str = " + str);
str = 0.57


4. DecimalFormat(반올림x)

double d = 0.56789
DecimalFormat format = new DecimalFormat(".##");
String str = format.format(d);
System.out.println("str = " + str);
str = 0.56


반응형