자기개발👨‍💻/코딩 알고리즘

[python] 백준2839 설탕 배달

천숭이 2021. 7. 6. 16:07

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

 

2839번: 설탕 배달

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

www.acmicpc.net

import sys
n=int(sys.stdin.readline())
b5 = n//5
r = n%5
b3=0

if r==0:
    print(b5)
elif r==1 and b5>=1:  # 5봉지하나 줄이기
    b5-=1
    b3+=2
    print(b5+b3)
elif r==2 and b5>=2:
    b5-=2
    b3+=4
    print(b5 + b3)
elif r==3:
    b3+=1
    print(b5 + b3)
elif r==4 and b5>=1:
    b5-=1
    b3+=3
    print(b5 + b3)
else:
    print(-1)

규칙이 있는 문제.

 

경우는 여섯개로 나뉘어진다. b5는 입력받은 크기에에서 5를 나눈 몫이고, r은 그 나머지

 

b5는 설탕 전체크기

 

1) 나머지가 0일때,

봉지3 없이도 최적의 결과이므로 b5출력

 

2) 나머지가 1일때,

봉지5의 값을 1 줄이고 봉지3의 값을 2 늘려준다. 이 때 봉지5가 1보다 크거나 같은지를 체크해줘야한다.

3) 나머지가 2일때,

봉지5의 값을 하나 늘리는 것으로는 봉지3이 모두 담지를 못한다. 따라서 봉지5의 값을 2 줄이고, 봉지3의 값을 4 늘린다. 이 때 봉지5가 2보다 크거나 같은지를 체크해줘야 한다.

 

 

4) 나머지가 3일때,

 봉지5에서 빼내는 것 없이 봉지3 1개만 추가 하면 된다.

 

5) 나머지가 4일때,

 나머지가 4일때는 봉지5를 1 줄여준다. 그럼 9개를 봉지3에 담아야 하기 때문에, 봉지3을 3 늘려준다. 봉지5가 1보다 크거나 같은지를 체크해줘야 한다.

 

6) 그 외일때,

 봉지3과 봉지5로 담을 수 없는 크기이므로 -1을 출력한다.