예제 출력 1,2 를 보니 나눗셈의 결과가 소수 형태로 나오는 것을 볼 수 있었다.
나는 자신있게 다음과 같이 작성했다.
#include <iostream>
using namespace std;
int main(){
double d1=0,d2=0;
cin>>d1>>d2;
cout<<d1/d2<<endl;
return 0;
}
컴파일 결과 (입력 1,3)

결과는 땡!! 틀렸다.
틀린 이유
절대오차, 상대오차 이 말을 신경쓰지 않고 풀어서 생긴 문제인듯하다.

새로 알게 된 사실 & 정답을 찾아가기 위한 과정
상대오차 : 10^n 까지 허용 => 실제값-10^n ~ 실제값+10^n 범위 내에서 출력해야 함.
위의 제출물이 틀린 이유는... 우선 소수점 자리를 fix 해주지 않고 출력했기 때문에 소수점 아래로 5자리까지만 출력이 된다.
0.33333333233333333333333333333333~0.3333333343333333333333333333333 사이 내에서 출력해야 하는데 지금 작성한 코드이 출력값이 0.33333이다. 범위를 벗어난다.
다음과 같이 범위를 벗어났는지 확인 하는 방법도 있다.
내가 작성했던 오답의 결과값과 정답의 값의 차는 다음과 같다.

0.000003333.... 정도의 차이가 있다. 오차(10^(-9) 인 0.000000001) 보다 크다. 따라서 오답이다.
대충 0.333333332 ~ 0.333333334 사이를 출력하면 된다는 뜻이니까
0.333333333 or 0.3333333333, 0.33333333333333333 ..... 을 출력했을 때 다 정답이 될 것이다.
즉,
소수점 자리 수가 최소 9자리가 되게 출력하면 정답이 되는 것이다.
+ float, double long double 중 어떤 자료형을 택해야 하는가?
자릿수는 다음과 같다.

float은 유효 자릿수가 7이기 때문에 float을 이용하면 소수점 아래로 7자리까지만 출력이 가능하므로 부적절하다. double 이나 long double을 써야겠다.
정답
나는 답을 작성할 때 소수점 출력 자리 수를 10자리로 제한하고 출력했더니 통과했다.

** 소수점 출력 : cout.precision(자리수);
** c
*틀린 내용이 있다면 언제든지 지적 부탁드립니다! *
'코딩테스트 > 백준' 카테고리의 다른 글
| 백준 10773번(스택): 제로 (0) | 2022.10.18 |
|---|---|
| 백준 10828 (스택): 스택 ...나의 삽질과 고군분투 (0) | 2022.10.18 |
| 백준 10171: 고양이 (특수문자 출력) (0) | 2022.10.14 |
| 백준 2588번 c++ : 두 가지 풀이 방법( getline 함수, 문자열 자르기 substr, 문자열->숫자 형변환 stoi 함수.) (0) | 2022.10.14 |
| 백준 10926 : c++에서의 string 사용 (0) | 2022.10.13 |