(구) solved ac class 문제들/class 1

[class 1]백준 A/B(1008번) 풀이 (C++/Python)

isekaipudding 2026. 1. 30. 17:48

문제 : A/B(1008번)(Bronze V)

문제 링크 : https://www.acmicpc.net/problem/1008
출처 : Baekjoon Online Judge

 

이 문제는 A 나누기 B 연산을 하면 됩니다.

 

C++에서는 다음과 같이 double로 변환해서 해결할 수 있습니다.

#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    double a, b;
    cin >> a >> b;

    cout << a / b << '\n';
 
    return 0;
}

자, 과연 AC 받을 수 있을까요???

오잉? 오답이라고 하네요? 어째서일까요?

C++에서는 기본적으로 정수 나누기 정수로 하면 소수점 6자리까지만 계산합니다.

a = 1, b = 7인 경우 0.142857까지만 출력합니다.

그리고 이로 인해 아래의 반례가 발생합니다.

input
1 11

output
0.0909091

answer
0.0909090909

"실제 정답과 출력값의 절대오차 또는 상대오차가 10^-9 이하이면 정답이다"

라는 조건에 의해 답은 0.090909090 혹은 0.090909091로 해도 정답으로 인정 받습니다.

 

자, 그러면 이 문제를 어떻게 해결해야 할까요?

a, b는 정수형 변수로 가정하고 a = 15, b = 7이라고 가정합니다.

우선 정수 부분을 구해야 합니다.

정수 부분은 a / b로 쉽게 구할 수 있습니다.

즉, 15 / 7 = 2가 됩니다.

그리고 나머지 15 % 7 = 1로 구합니다.

이러면 15 나누기 7의 값은 2.xxxxxxxxx가 됩니다.

그러면 소수 부분을 어떻게 구해야 할까요?

아래의 사진을 확인해주세요.

제가 직접 공책에 필기한 계산 과정입니다.

우선 정수 부분을 구하기 위해 몫 연산을 한 뒤 나머지 연산을 합니다.

그리고 그 몫 부분을 cout으로 출력한 다음 "."을 추가로 cout으로 출력합니다.

그 뒤 나머지 * 10 하고 몫 연산/나머지 연산을 하는 식으로 해서 각 몫 부분들을 하나씩 출력합니다.

그러면 15 / 7 = 2.142857142857...이 나오게 됩니다.

그러므로 C++ 소스 코드는 아래와 같이 작성할 수 있습니다.

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int a, b;
    cin >> a >> b;
    cout << a / b << ".";

    a %= b;
    for(int i = 1; i <= 9; i++) {
        a *= 10;
        cout << a / b;
        a %= b;
    }

    return 0;
}

 

이제 제출해볼까요?

멋진 AC 판정을 받았습니다!

 

그 다음으로 Python으로 어떻게 하면 되는지 알려드립니다.

Python은 정말로 간단합니다.

1001번 문제에서 -를 /로 바꾸기만 하면 됩니다.

import sys

input = sys.stdin.readline

A, B = map(int, input().split())

print(A / B)

참 쉽죠?