반응형

백준 1008번 A/B 풀이 코드

C | C++ | Java | Python


풀이

scanf()로 a, b 변수를 받고 prinf()로 a/b를 출력합니다. 입력 시엔 변수명 앞에 &을 쓰는 것에 유의합니다. 상대오차가 10⁻⁹ 이내여야 한다는 단서가 있으므로 소숫점 아래 9자리까지 실수형으로 출력합니다.

아래 코드처럼 입력시 a, b 변수를 정수(int)로 받았다면 나누기 연산 시 실수(double)로 형 변환을 해야 합니다. 이때 (double)(a / b)로 작성하면  (a / b)가 소숫점이 절삭된 정수로 먼저 계산된 뒤 실수 형태로 변환되기 때문에 오차가 발생합니다. 나눗셈 연산보다 변수 a의 실수 변환이 먼저 되도록 (double) a / b로 작성해 주세요.

cin으로 a, b 변수를 받고 cout으로 a*b를 출력합니다. 상대오차가 10⁻⁹ 이내여야 한다는 단서가 있으므로 소수점 아래 11자리에서 반올림하여 10자리까지 표현할 수 있도록 cout.precision(10)을 선언한 후 출력합니다.

java.util.Scanner 라이브러리를 불러와 Scanner(System.in)로 a, b 변수를 받고 System.out.println()로 a/b를 출력합니다. 상대오차가 10⁻⁹ 이내여야 한다는 단서가 있으므로 변수는 소수점 아래 9자리 이상 표현할 수 있는 실수형(double)으로 입력받습니다.

double형의 연산은 반복될 시 오차가 발생할 수 있지만 이 문제 같은 단순한 1회 연산에선 소수점 아래 9자리 이내 오차 위험이 없으므로 그대로 출력합니다.

map(int, input().split())로 a, b 변수를 입력 받고 print()로 a/b를 출력합니다. 상대오차가 10⁻⁹ 이내여야 한다는 단서가 있지만, Python3는 나누기 연산 시 기본적으로 소수점 16번째자리까지 표현하는 실수를 리턴하므로 그대로 출력합니다.

코드

#include <stdio.h>

int main () {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%.9f", (double)a / b);
    return 0;
}
#include <iostream>

int main() {
    double a,b;
    std::cin >> a;
    std::cin >> b;
    std::cout.precision(10);
    std::cout << a / b;
    return 0;
}
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();
        sc.close();
        System.out.print(a/b);
    }
}
문제 출처
a, b = map(int, input().split())
print(a / b)

문제 출처

https://www.acmicpc.net/problem/1008

반응형

+ Recent posts