개발일기

백준 1312번 파이썬 풀이 : 소수 본문

알고리즘 문제풀이/백준

백준 1312번 파이썬 풀이 : 소수

한민기 2021. 8. 19. 15:08
반응형

문제 링크 : https://www.acmicpc.net/problem/1312

 

1312번: 소수

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

www.acmicpc.net

문제

피제수(분자) 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번째 수를 출력한다.

 

문제 풀이

# 처음 문제풀이 (런타임 에러)

# 나누기 한 결과값을 .(소수점) 을 기준으로 문자열을 잘라 아래 부분만 새로운 변수에 저장한다.

# 해당 변수에서 N-1 번째의 배열을 출력한다.

1
2
3
4
5
6
A, B, N = map(int, input().split())
C, D = str(A / B).split(".")
if N-1 > len(D):
    print(0)
else:
    print(int(D[N - 1]))
cs

# 런타임 에러가 난다.

# 배열의 index 관련 런타임 에러가 나서 소수점의 길이와 N의 길이를 비교하여 넘을 경우 0을 출력하게 했다.

# 역시 틀렸다.

 

이유를 아시는 분은 댓글 부탁드립니다..

 

 

# 두 번째 풀이

# 수학적으로 접근을 해야할 것 같아 입력한 n-1 만큼 반복을 한다.

# 반복은 a * 10 % b 를 a에 담으며 반복한다.

1
2
3
4
5
a, b, n = map(int, input().split())
a %= b
for i in range(n-1):
    a = (a*10) % b
print((a*10// b)
cs

수학적으로 접근하면 문제를 맞출 수 있다.

 

아직까지 첫 번째 방법이 틀린 반례를 찾지 못했다..

 

반응형
Comments