스터디/알고리즘
[1049] 기타줄
세졍
2024. 1. 8. 21:43
수학문제
1.경우의 수 나누어서 최소값 구하기
2. 끊어진 기타줄을 사용해서
- 각 브랜드 별로 낱개 최소값 배열만들고, 6개 묶음 최소값만들어서 각 최소값찾고
- 모두 낱개로 샀을경우, 6개묶음으로 샀을경우 , 6개묶음과+낱개혼합해서 산 경우로 나눔
N,M = map(int,input().split())
sixarr = []
onearr = []
for _ in range(M):
six,one = map(int,input().split())
sixarr.append(six)
onearr.append(one)
if N <= 6 :
ans = min(min(onearr)*N,min(sixarr))
elif N%6 == 0:
ans = min(min(onearr)*N,(min(sixarr)*(N//6)))
else:
ans = min(min(onearr)*N,(min(sixarr)*(N//6+1)),(((N//6)*min(sixarr))+((N-(6*(N//6)))*min(onearr))))
print(ans)
<comment>
1. min(onearr), min(sixarr)를 애초에 변수로 만들면 더 깔끔한 코드가 될 것 같다
broken,brand = map(int,input().split())
p_arr = []
o_arr = []
for _ in range(brand):
package,one = map(int,input().split())
p_arr.append(package)
o_arr.append(one)
p_min = min(p_arr)
o_min = min(o_arr)
result = []
# 6개 이상일때 경우(모두 낱개로사기, 모두 묶음으로사기,묶음과 낱개 혼합으로사기)
if broken>= 6:
result.append(broken * o_min)
i = broken // 6
j = broken % 6
result.append(p_min*i + o_min*j)
result.append(p_min*(i+1))
# 6개이하일때 경우(모두낱개로 사기, 묶음하나로 사기)
else:
result.append(broken*o_min)
result.append(p_min)
print(min(result))