potion 문제를 파이썬으로 푸는데 오답이 계속...

  • User Avatar
    doctidea

    일단 소스코드입니다.
    ~~~ py3
    import math

    def cds(a, b):
    while b != 0:
    k = a % b
    a = b
    b = k
    return a

    sta = int(input())
    for aa in range(sta):
    inum = int(input())
    ingre = list(map(int, input().split())) # 비율
    puts = list(map(int, input().split())) # 쟤료
    for bb in range(inum): # 최대공약수
    if bb == inum - 1:
    break
    gcd = cds(ingre[bb], ingre[bb+1])
    ingres = [0 for a in range(inum)] # 최대공약수로 나눈 비율
    current = 0
    future = 0
    count = [0 for a in range(inum)] # 출력값
    for cc in range(inum):
    ingres[cc] = ingre[cc] / gcd
    for dd in range(inum): # 가장 비율이 높은 거 찾기
    current = puts[dd] / ingres[dd]
    if current > future:
    future = current
    kok = math.ceil(future) # 올림
    for gg in range(inum): # 가장 높은 비율만큼 곱하기
    ingres[gg] *= kok
    count[gg] = int(ingres[gg] - puts[gg])
    counts = 0 # 한병이상인지 확인
    for ff in range(inum):
    if ingres[ff] / ingre[ff] >= 1:
    counts += 1
    if counts >= inum:
    for ee in range(inum):
    print(count[ee], end=' ')
    print(' ')
    else: # 한병이상이 안됨
    kok = gcd
    for gg in range(inum):
    ingres[gg] *= kok
    count[gg] = int(ingres[gg] - puts[gg])
    for ee in range(inum):
    print(count[ee], end=' ')
    print(' ')
    ~~~

    입력받은 비율의 최대공약수를 구하고, 비율을 최대공약수로 나누어 가장 간단한 비율로(더이상 나눠질 수 없는 상태) 만들고, 재료를 비율로 하나씩 나누어 가장 높은 수를 뽑고 그 수를 비율에 곱합니다. 그리고 비율-재료를 하여 출력을 하는 코드입니다.

    코드를 실행하고 문제에서 나오는 예제입력 대로 하면 예제 출력대로 나오고, 댓글에 있는 100 100 100 100 도 99 99 99 99로 출력이 되는데 오답이라고 계속 떠서 짜증이 나네

    혹시 뭐가 오답을 계속 내게 하는지 아시는분은 댓글 달아주시기 바랍니다.


    7년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.