📍 백준 1008번 - A/B 문제 C++
🧩문제 요약
A/B를 출력하시오
🧾내가 작성한 초기 코드
#include <iostream>
using namespace std;
int main(){
long double a, b;
cin >> a >> b ;
cout << a/b <<"\n";
}
👍이 문제에서 배운점
브론즈 문제이기도 하고 문제가 너무 쉽길래 기본 연산 문제이군! 하면서 아주 당당하게 A/B를 틀렸지만 당당하게 틀렸다. ㅋㅋㅋ
이 문제에서 주목할 점은 출력 요구조건에 있다.
😕 문제점 1.
실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.
위의 출력 요구조건을 만족하기 위해서는 출력이 소수 9자리 이상으로 되야 하는데
그냥 그대로 출력하면 아래와 같이 6자리 까지만 출력하고 끝나 버린다.
이는 부동 소수점 문제와도 연결이 되어있는다. 부동소수점은 말그대로 소수점이 고정되어있지 않고 떠다닌다는 의미이다. 출력되는 소수점의 자리를 조정하기 위해 std::fixed와 std::cout.precision()을 사용하면 된다.
✅ std::fixed
std::fixed는 부동 소수점 값을 고정 소수점 표기법으로 변경해준다.
이때, 소수점 이하 자릿수는 이어서 살펴볼 precision에 의해 지정된 만큼 표기된다.
기존에 설정되어 있던 부동 소수점 표기법에서는 정밀도 필드가 소수점 앞뒤에 표시할 수 있는 최대의 의미있는 자릿수를 지정하지만, 고정 소수점 표기법으로 변경시에는 정밀도 필드가 소수점 이하 몇자리를 표시할 것인지 정확하게 지정하게 된다.
✅ std::cout.precision()
std::cout.precision()은 정밀도 필드가 소수점 이하 몇 자리를 표시할 것인지 정확하게 지정한다. 소수점 앞에 있는 숫자는 정밀도에 영향을 받지 않으며, 소수점 이하에 0이 붙는 경우에도 그 갯수만큼 표시된다.
🧾 완성된 코드
#include <iostream>
using namespace std;
int main(){
long double a, b;
cin >> a >> b ;
cout.precision(15);
cout << fixed;
cout << a/b <<"\n";
}
쉬운 문제라고 만만하게 봤는데 알아야할 기본지식들이 많이 내포된 문제였다.
절대 쉽게 생각하지 말기...
'하루 알고리즘 1문제 풀기' 카테고리의 다른 글
백준 1966번 - 프린터 큐 문제 C++ [Queue] (0) | 2025.04.11 |
---|---|
백준 1929번 - 소수찾기 문제 프로그래밍 언어 [아라토스테네스의 체] (0) | 2025.04.10 |
백준 11866번 - 요세푸스 0 문제 C++ [Queue] (0) | 2025.04.09 |
백준 2839번 - 설탕배달 문제 C++ [그리디 알고리즘/다이나믹 프로그래밍] (0) | 2025.04.08 |
01백준 1904번 - 01타일문제 C++ [다이나믹 프로그래밍 알고리즘] (0) | 2025.04.07 |