본문 바로가기
코딩테스트

[Python] 백준 1312번 풀이

by CuckooBird 2023. 1. 3.

문제

피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.


입력

첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다.


출력

A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.


코드

import sys
A, B, N = map(int, sys.stdin.readline().strip().split())
N = 10**N
print(int(((A/B)*N)%10))

처음에는 위의 코드로 작성했었습니다. 하지만, int too large to convert to float 라는 오류가 났습니다. 왜냐하면 N을 엄청 큰 수로 작성 했을 때에는 10에 10000제곱을 해야하는데, 그것을 float형인 A/B와 연산하기라는 것이 어렵기 때문이었죠.

그래서 이 문제를 해결하려면 한번에 계산하는 방법이 아니라 for문으로 소수점 한자릿수 한자릿수 알아가야 문제를 해결할 수 있습니다.

 

import sys
A, B, N = map(int, sys.stdin.readline().strip().split())
for _ in range(N):
    A = (A%B) * 10
    result = A//B
print(result)

문제의 정답 코드입니다.


후기

이번 문제는 구글링을 통해서 알아냈습니다. 정말 수학 문제 같았네요...

 

중요한 택배를 잘못 보내서 기분이 안 좋습니다... 왜 행복하려고 하면 불행해지고 다시 밝아지려고 하면 어두워지는 걸까요... 그래서 당장의 행복도 마음껏 즐기지 못하게 되는 것 같습니다. 모든 선택에 책임이 따른다는 게 이렇게 피곤하고 힘든 일인지 몰랐는데... 어른이 되는 과정이겠죠...