스터디/알고리즘

[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))