728x90
백준 단계별로 풀어보기
1. 입출력과 사칙연산
1008. A/B
만약 입출력 방식에 익숙하지 않으신 분들은 아래의 글을 참고 해 주세요.
C++ 기본 입출력
python 기본 입출력
'%' 문자를 나눗셈 연산자로 착각하기 쉬운데 키보드의 ? 키의 '/' 임을 유의하세요.
만약 파이썬으로 풀고 계시다면 이건 뭔가 더 붙어 있네... 하는 정도로 가볍게 넘어가실 수 있지만,
c++로 풀고계시다면 처음으로 약간 혼돈이 올 수 있을 것 같네요.
여기서 주목해야 할 부분은 출력값의 절대오차 혹은 상대오차가 10^-9이하여야 한다는 부분입니다.
C++
먼저, c++의 데이터 타입 및 범위가 생소하다면 아래의 문서를 참고 해 주세요.
c++로 이 문제를 풀 때 자주 빠트리는 지점은 2가지입니다.
- 변수 타입을 실수형으로 사용했는지
- 여지껏 int만 주구장창 썼기 때문에 관성적으로 int를 사용할 가능성.
- 여기서는 10^-9 이하의 오차만 허용하기에, 최대 소수점 9자리만 지원하는 float를 사용하시면 안됩니다.
- 최대 소수점 15자리까지 지원하는 double 형을 사용해야 합니다.
- 소수점 표현 범위를 제대로 지정했는지
- 아래의 코드를 봅시다. 결과가 어떻게 나올까요?
#include <iostream> int main() { double a = 1; double b = 3; std::cout << a/b; }
1008번 문제의 예시처럼 0.33333333333333333.. 이 나올 거라고 생각하기 쉽지만,
결과는 0.333333 입니다. 이러면 오차가 10^-9 보다 커지게 됩니다. - 이렇게 출력되는 이유는 c++ 에서 기본적으로 소수점 출력 범위가 6자리 디폴트로 설정되어 있기 때문입니다.
- c++ 소수점 자리수 설정 코드는 아래와 같습니다.
std::cout.precision(10); //괄호 안에 출력하고 싶은 소수점 자리수를 입력합니다.
- 아래의 코드를 봅시다. 결과가 어떻게 나올까요?
최종 코드
#include <iostream>
int main(){
double a, b;
std::cin >> a >> b;
std::cout.precision(10); // 15까지 해도 됩니다. 10자리부터 정답이 나옵니다.
std::cout << a/b ;
}
Python
python의 경우에는 사실상 다 알아서 해주고 소수점 자리수도 길~게 출력 해 주기 때문에 그냥 하시면 됩니다. (..)
언젠가 다시 다루겠지만 이렇게 숫자나 문자를 다루는 문제에서는 파이썬을 활용하는 게 훨씬 간편한 경우가 많습니다. ( 코테에서 )
최종 코드
a, b = map(int,input().split())
print(a/b)
728x90
'백준 단계별' 카테고리의 다른 글
[python/c++] 백준 단계별 1. 입출력과 사칙연산 : 10869. 사칙연산 (0) | 2021.06.08 |
---|---|
[python/c++] 백준 단계별 1. 입출력과 사칙연산 : 10998. AxB (0) | 2021.05.20 |
[python/c++] 백준 단계별 1. 입출력과 사칙연산 : 1001. A-B (0) | 2021.05.20 |
[python/c++] 백준 단계별 1. 입출력과 사칙연산 : 1000. A+B (0) | 2021.05.20 |
[python/c++] 백준 단계별 1. 입출력과 사칙연산 : 10172. 개 (0) | 2021.05.01 |