-
[백준] 1312번: 소수코딩(Coding)/백준 문제풀이 2021. 1. 28. 12:52728x90
링크: 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번째 수를 출력한다.
문제 접근
해당 문제는 나눗셈의 과정을 논리적으로 해석하는 것을 묻는 문제인것 같다.
예시를 들어 a=3 b=4라고 할때 a를 b로 나누는 과정을 살펴보면, a가 b보다 작기때문에 a에 0을 붙인다.(10을 곱한다.) 이제 a가 b보다 커졌으니 b로 나눈다. 나눈 몫은 7이고 나머지는 2이다. 나머지를 다시 a라 했을때, a=2, b=4이므로 또 나눈다. a가 b보다 작기때문에 a에 0을 붙인다.(10을 곱한다.) a가 b보다 커졌으니 a를 b로 나눈다. 몫은 4 나머지는 0이다.즉 3/4 = 0.75인 것이다.
위 과정을 정리해보면
1. a가 b보다 작으면 a에 10을 곱한다.
2. a를 b로 나눈 몫과 나머지를 구한다.
3. 몫은 소수점의 자리가 되고 나머지는 a로 갱신된다.
4. 다시 1번으로 돌아간다.
위 과정을 반복하면 된다.
이를 코드로 표현하면 아래와 같다.
코드
""" 백준 알고리즘 1157번: 단어 공부 https://www.acmicpc.net/problem/1157 """ import sys def calc(a,b,n): li = [] i = 0 while i != n+1: # a가 b보다 작을때 if a < b: a *= 10 li.append(0) # 몫과 나머지를 구해 a를 갱신한다. quot = int(a / b) rema = int(a % b) li.append(quot) a = rema*10 i += 1 return li[n] def main(): a, b, n = sys.stdin.readline().split() a = int(a); b = int(b); n = int(n) print(calc(a,b,n)) if __name__ == "__main__": main()
728x90'코딩(Coding) > 백준 문제풀이' 카테고리의 다른 글
[백준] 2941번: 크로아티아 알파벳 (0) 2021.02.03 [백준] 2869번: 달팽이는 올라가고 싶다. (0) 2021.02.02 [백준] 1157번: 단어 공부 (0) 2021.01.27 [백준] 1236번: 성지키기 (0) 2021.01.26 [백준] 2747번: 피보나치 수 (0) 2021.01.25