728x90

백준 단계별로 풀어보기

 

단계별로 풀어보기

단계별은 @jh05013님이 관리하고 계십니다. 단계제목설명정보총 문제내가 맞은 문제1입출력과 사칙연산입력, 출력과 사칙연산을 연습해 봅시다. Hello World!112if문if문을 사용해 봅시다.53for문for문을

www.acmicpc.net


1. 입출력과 사칙연산

1008. A/B


이미지를 클릭하면 해당 문제 페이지로 이동합니다.

 

만약 입출력 방식에 익숙하지 않으신 분들은 아래의 글을 참고 해 주세요.

 

C++ 기본 입출력

 

[C++] 기본 입출력 ( cin | cout | scanf | printf )

기본 입출력 함수 헤더 파일 #include 위의 헤더파일을 반드시 추가해야 사용 가능합니다. cin,cout 모두 std 네임스페이스 내에 존재합니다. 참고로 아래의 코드를 추가하면 std:: 를 붙이지 않고도 사

where-i-am.tistory.com

 

python 기본 입출력

 

[Python] 기본 입출력 ( input | split | map | sys.stdin.readline | print )

기본 입력 함수 input() 가장 기본적인 입력 함수입니다. 개행 문자 이전까지의 1 line을 읽어옵니다. str = input() #input : hello print(str) # output : hello 특별히 형식을 정해주지 않으면 string 형식으로..

where-i-am.tistory.com

 

 

'%' 문자를 나눗셈 연산자로 착각하기 쉬운데 키보드의 ? 키의 '/' 임을 유의하세요.

 

만약 파이썬으로 풀고 계시다면 이건 뭔가 더 붙어 있네... 하는 정도로 가볍게 넘어가실 수 있지만,

c++로 풀고계시다면 처음으로 약간 혼돈이 올 수 있을 것 같네요. 

여기서 주목해야 할 부분은 출력값의 절대오차 혹은 상대오차가 10^-9이하여야 한다는 부분입니다. 

 


C++

먼저, c++의 데이터 타입 및 범위가 생소하다면 아래의 문서를 참고 해 주세요.

 

[C++] 데이터 형식 | 크기 | 범위 ( Data type | size | range )

출처: Data Type Ranges Learn more about: Data Type Ranges docs.microsoft.com Visual Studio 2019 기준 유형 이름 크기 (byte) 기타 이름 값의 범위 int 4 signed –2,147,483,648 ~ 2,147,483,647 unsigned..

where-i-am.tistory.com

 

c++로 이 문제를 풀 때 자주 빠트리는 지점은 2가지입니다.

  1. 변수 타입을 실수형으로 사용했는지
    • 여지껏 int만 주구장창 썼기 때문에 관성적으로 int를 사용할 가능성.
    • 여기서는 10^-9 이하의 오차만 허용하기에, 최대 소수점 9자리만 지원하는 float를 사용하시면 안됩니다.
    • 최대 소수점 15자리까지 지원하는 double 형을 사용해야 합니다. 
  2. 소수점 표현 범위를 제대로 지정했는지
    • 아래의 코드를 봅시다. 결과가 어떻게 나올까요?
      #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

+ Recent posts