1일 1PS 17일차!

📚 문제


골드 4

  • 3.2 같은 경우는 32가 아니라 16이 곱해서 나오는 최소의 정수이다. 이는 3.2 가 32/10 이면서 16/5 이기 때문이다. 즉 최소의 정수를 구하기 위해서는 소수의 분모를 구하면 되고 이는 2와 5로 소인수분해 될 수 밖에 없다.
  • 이때 가장 쉽게 최소의 분모를 구하는 방법은 분자와 분모의 최소공배수를 이용하는 방법이다.

💡 포인트


  1. 소수를 입력받아 10^n 을 곱해 정수형태를 만들어준다.
  2. 해당 값과 10^n 의 최소 공배수를 구해 나눠준다.
  3. 소수가 가장 간단한 형태의 분자와 분모로 나뉜다.
  4. 이때 분모의 개수의 [1~5] 로 분자의 수를 만들어주는 문제이다.
  5. m 개의 수를 1 에 넣고 n = n - m 을 한다.
  6. n < m 가 될 때까지 n = n - m 을 반복하며 칸수를 올린다.
  7. n < m 이면 마지막으로 n개만 한 칸을 더 올린다.

💻 코드



import math
import sys

n = int(''.join(input().split('.')))
m = 10 ** (len(str(n)) - 1)
r = math.gcd(n, m)

n //= r
m //= r

arr = [0 for _ in range(5)]
arr[0] = m
n -= m

for i in range(1, 5):
    if n >= m:
        arr[i -1], arr[i] = 0, m
        n -= m
    else:
        arr[i - 1] -= n
        arr[i] += n
        n = 0
        break

print(" ".join(map(str,arr)))


업데이트:

댓글남기기