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일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
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년 전