[백준/파이썬] 15792번 A/B - 2 풀이 - 큰 수 나눗셈과 소수점 구현
업데이트:
빠르게 보기
- 파이썬은 큰 정수를 기본 지원하므로 오버플로우 걱정보다 소수점 아래를 어떻게 출력할지에 집중하면 됩니다.
- 정수부는
A // B, 소수부는 나머지에 10을 곱해가며 몫을 이어 붙이면 됩니다.
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 15792번 A/B - 2
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
두 정수 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번의 핵심은 큰 수 자체보다도 소수점 아래 자릿수를 직접 구성하는 구현입니다.
- 정수부와 소수부를 분리해서 생각하면 코드가 훨씬 단순해집니다.
이 글과 함께 보면 좋은 글
큰 수 연산이나 나눗셈 구현 문제를 같이 보면 비슷한 패턴을 더 빨리 익히기 좋습니다.
- 백준 문제풀이 허브 수학/구현 문제를 더 찾을 때
- 13277번 큰 수 곱셈 풀이 큰 수 연산 문제를 이어서 볼 때
- 3733번 Shares 풀이 정수 나눗셈 문제를 함께 볼 때
댓글남기기