λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜ 문제 풀이/Greedy

[λ°±μ€€]2839번: 섀탕 배달

by syLim___ 2023. 5. 6.
728x90

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

 

2839번: 섀탕 배달

μƒκ·Όμ΄λŠ” μš”μ¦˜ 섀탕곡μž₯μ—μ„œ 섀탕을 λ°°λ‹¬ν•˜κ³  μžˆλ‹€. μƒκ·Όμ΄λŠ” μ§€κΈˆ μ‚¬νƒ•κ°€κ²Œμ— 섀탕을 μ •ν™•ν•˜κ²Œ Nν‚¬λ‘œκ·Έλž¨μ„ 배달해야 ν•œλ‹€. 섀탕곡μž₯μ—μ„œ λ§Œλ“œλŠ” 섀탕은 봉지에 담겨져 μžˆλ‹€. λ΄‰μ§€λŠ” 3ν‚¬λ‘œκ·Έ

www.acmicpc.net


아이디어

1. 5kg봉지에 섀탕을 담을 수 μžˆλŠ” 만큼 λ‹΄λŠ”λ‹€.

2. 남은 μ„€νƒ•μ˜ 양이 3kg으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ Έμ•Όλ§Œ 3kg 봉지에 λ‹΄μ•„μ„œ 배달이 κ°€λŠ₯ν•˜λ‹€.

    λ”°λΌμ„œ 남은 μ„€νƒ•μ˜ 양이 3으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•ŠμœΌλ©΄, 5kgλ΄‰μ§€λ‘œλΆ€ν„° λ‹€μ‹œ 섀탕을 λΆ“λŠ”λ‹€. (되돌리기)

 

3-1. 남은 μ„€νƒ•μ˜ 양이 3kg으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€κ²Œ λ˜λŠ” μˆœκ°„μ΄ 였면, 남은 섀탕을 3kg 봉지에 λͺ¨λ‘ λ‚˜λˆ  λ‹΄λŠ”λ‹€.

3-2. λͺ¨λ“  섀탕을 λ‹€ 뢀어도 3kg으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•Šκ²Œ 되면 -1을 좜λ ₯ν•œλ‹€.

 

μ œμΆœμ½”λ“œ (python)

n = int(input())

answer = 0

# 5kg짜리 봉지에 λ‹΄κΈ°
if n//5 > 0:
  answer += n//5
  n %= 5

# 남은 μ„€νƒ•μ˜ 양이 3으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λ„λ‘ μ‘°μ •ν•˜κΈ°
while n%3 != 0 and answer > 0:
  answer -= 1
  n += 5

# 3kg짜리 봉지에 λ‹΄κΈ°
if n//3 > 0:
  answer += n//3
  n %= 3

# κ²°κ³Ό 좜λ ₯
if n > 0:
  print(-1)
else:
  print(answer)

 

λ‹€λ₯Έ μ‚¬λžŒλ“€ 풀이

λ‚΄ 풀이가 μ’€ 웃긴 것 같기도 ν•΄μ„œ λ‹€λ₯Έ μ‚¬λžŒλ“€ μ½”λ“œ μ—¬λŸ¬ 개λ₯Ό κ΅¬κ²½ν•΄λ³΄μ•˜λ‹€.

 

βœ… 그리디 λ°©λ²•μœΌλ‘œ ν‘Ό μ‚¬λžŒλ“€μ΄ κ°€μž₯ λ§Žμ•˜λ‹€.

n을 5둜 λ‚˜λˆˆλ‹€ - 5둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•ŠμœΌλ©΄ 총 λ¬΄κ²Œμ—μ„œ 3을 λΉΌμ€€λ‹€ - 총 λ¬΄κ²Œκ°€ 0보닀 μž‘κ±°λ‚˜ κ°™μ•„μ§€λ©΄ 루프λ₯Ό νƒˆμΆœ - κ²°κ³Ό 좜λ ₯

 

βœ… 또, λ‚˜λŠ” dpλŠ” μƒκ°ν•˜μ§€ λͺ»ν–ˆλŠ”λ° dp둜 ν‘Ό μ‚¬λžŒλ“€λ„ κ½€ λ§Žμ•˜λ‹€.

1, 2, 3, 4, 5kg을 λ§Œλ“œλŠ” μ΅œμ†Œ λ΄‰μ§€μˆ˜λŠ” 각각 0, 0, 1, 0, 1 (0은 λ§Œλ“€ 수 μ—†λ‹€λŠ” 뜻) 이닀.

dp배열을 μ΄λ ‡κ²Œ μ΄ˆκΈ°ν™”μ‹œμΌœλ†“κ³ ,

6λΆ€ν„° μ‹œμž‘ν•΄μ„œ Nkg을 λ§Œλ“œλŠ” μ΅œμ†Œ λ΄‰μ§€μˆ˜λ₯Ό bottom-up λ°©μ‹μœΌλ‘œ κ³„μ‚°ν•΄λ‚˜κ°€λŠ” λ°©λ²•μ΄μ—ˆλ‹€.

 

728x90