반응형
문제
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.
예제 입력 1
1 3
예제 출력 1
0.33333333333333333333333333333333
10-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.
예제 입력 2
4 5
예제 출력 2
0.8
답
import java.util.Scanner;
public 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);
sc.close();
}
}
어떻게 보면 매우 기초적이고 쉬운 문제인데 그렇다고 아무 생각없이 풀면 틀릴 수 있다.
문제를 보면 '두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.' 라고 되어있는데, 이것만 보고 아무 생각 없이 두 정수에 대한 변수의 자료형을 'int'로 하게 되면 두 값을 나눈 값도 '정수'로 나오기 때문에 답이 틀리게 된다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt(); //만약 a에 20을 입력
int b=sc.nextInt(); //만약 b에 3을 입력
System.out.println(a/b); //결과는 소수점이 버려진 정수 6이 나온다
sc.close();
}
}
그렇기 때문에
int a=sc.nextInt();
int b=sc.nextInt();
이게 아니라
double a=sc.nextDouble();
double b=sc.nextDouble();
이렇게 써야 하는 것이다.
그럼 여기서 float 자료형은 왜 안될까?
float이 안되는 이유는 정밀도 때문이다.
실수값을 표현하기 위한 자료형 - float(4Byte), double(8Byte)
float b1=1.23456789;
//이 경우 8Byte(double) 값을 4byte 자료형에 저장하려고 해서 에러남
float b1=1.23456789F; ==> 가수부로 표현 가능한 크기(정밀도) : 소수점 7자리
double b2=1.23456789; ==> 가수부로 표현 가능한 크기(정밀도) : 소수점 15자리
float를 사용할 때는 정밀도에 주의해야 한다.
특히, 나눗셈의 결과가 소수점 이하 9자리 이상의 정확도를 요구하는 경우, float로는 충분하지 않을 수 있다.
반응형
'IT개발 > 코딩테스트 연습' 카테고리의 다른 글
[프로그래머스] 스택/큐_올바른 괄호 (0) | 2025.03.05 |
---|---|
자바 코딩테스트에서 자주 활용되는 문법과 자료구조 (1) | 2025.02.07 |
2차원 배열 누적합(합배열) 개념 이해하기 (1) | 2025.02.07 |
합배열 개념 및 예제(코딩테스트/배열/구간합) (0) | 2025.02.06 |
댓글