[백준/파이썬] 15792번 A/B - 2 풀이 - 큰 수 나눗셈과 소수점 구현

업데이트:

빠르게 보기

  • 파이썬은 큰 정수를 기본 지원하므로 오버플로우 걱정보다 소수점 아래를 어떻게 출력할지에 집중하면 됩니다.
  • 정수부는 A // B, 소수부는 나머지에 10을 곱해가며 몫을 이어 붙이면 됩니다.


문제 정보


풀이

문제

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

  • 자세한 문제 및 입출력 예제는 상단의 문제 출처(백준 홈페이지)를 참조해주세요

코드

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

i = 0
result = (str(A//B)+".")
d = A%B
while i < 1000:
    d *= 10
    m = d//B
    result += str(m)
    d %= B
    if d == 0:
        break
    i += 1
print(result)

설명

Big Integer의 연산에 관한 문제입니다.

일반적으로, 자료형이 너무 커지면 오버플로우가 일어나겠지만, 파이썬은 기본적으로 Big Integer를 지원합니다. 따라서, 그냥 int형으로 입력을 받을 수 있습니다.

다만, 역시 연산속도는 매우 느려지게됩니다.

기본적인 방법으로는 주어진 시간 내에 해결이 불가능함과 더불어, 단순히 연산해주면 정규화된 표현식으로 답이 나올 수 있기 때문에, 구간을 나누어 해결해줍니다.

소숫점 아래 계산은 몫 나눗셈으로 해결합니다.

최대 1000자리까지 확인하면 되므로, 실제 반복도 길지 않고 구현 흐름만 정확히 잡으면 안정적으로 통과할 수 있습니다.



핵심 요약

  • 15792번의 핵심은 큰 수 자체보다도 소수점 아래 자릿수를 직접 구성하는 구현입니다.
  • 정수부와 소수부를 분리해서 생각하면 코드가 훨씬 단순해집니다.

이 글과 함께 보면 좋은 글

큰 수 연산이나 나눗셈 구현 문제를 같이 보면 비슷한 패턴을 더 빨리 익히기 좋습니다.

이런 주제는 어떠신가요?

비슷한 난이도와 유형의 문제를 이어서 보면 풀이 감각을 더 빠르게 잡기 좋습니다.

댓글남기기