Problem Solving (PS)/백준

백준 2839번 : 설탕 배달

ju_dev 2022. 11. 8. 20:56

문제.

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

아이디어 :

n kg의 설탕을 n = 3*(3kg 봉지 개수) + 5*(5kg 봉지 개수)로 나타낼 수 없으면 -1 출력

나타낼 수 있는 경우에는 3kg 봉지 개수 + 5kg 봉지 개수 를 더한 결과를 리스트에 전부 저장해 가장 작은 값 출력

 

n kg 설탕을

3kg 봉지를 사용하지 않는 경우부터 ~ 최대로 사용하는 경우의 3kg봉지의 개수 = [0 ~ n//3개]

5kg 봉지를 사용하지 않는 경우부터 ~ 최대로 사용하는 경우의 5kg봉지의 개수 = [0 ~ n//5개]

모든 경우의 수는 이 두 리스트에서 하나씩 뽑아 적절한 조합으로 만들 수 있다.

 

ex) n=27

n_3  = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

n_5 = [0, 1, 2, 3, 4, 5]

27 = 3*4 + 5*3 = 3*9 + 5*0

 

 

구현 :

n = int(input())
# 가질 수 있는 3kg, 5kg 봉지 개수의 경우
n_3 = [i for i in range((n//3)+1)]
n_5 = [j for j in range((n//5)+1)]
result = []

for i in n_3 :
  for j in n_5 :
    if (3*i + 5*j) != n :
      pass
    else :
      total = i+j
      result.append(total)

if len(result) == 0 :
  print(-1)
else : 
  print(min(result))

 

다른 방법) 업로드 예정