용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (248)
    • 개발 (75)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (19)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(Python) 백준 2839번 - 설탕 배달
알고리즘/알고리즘 문제 풀이

(Python) 백준 2839번 - 설탕 배달

2023. 1. 4. 16:26

문제 링크 : https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

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

www.acmicpc.net

풀이

처음엔 그리디 알고리즘으로 접근하려다가, 문제에서 제시된 봉지의 용량이 3kg , 5kg으로 배수의 관계가 아니기 때문에 불가능함을 깨닫고 다이나믹 프로그래밍으로 풀이를 진행했다.

import sys
n = int(sys.stdin.readline())
arr = [5001] * (n+1) # 문제에서 주어지는 최대 무게가 5000kg이므로 만들 수 없는 경우를 5001로 설정
arr[0] = 0 # 0kg은 봉지 없이 만들 수 있음
for i in range(3, n+1): # 1kg, 2kg은 만들 수 없기 때문에 계산하지 않음 
    if i == (3 or 5): # 3kg과 5kg은 봉지 한 개로 만들 수 있음
        arr[i] = 1
    elif i == 4: # 4kg은 만들 수 없으므로 5001 유지
        continue
    else: # 그 외의 수 계산
        arr[i] = min(arr[i], arr[i-3]+1, arr[i-5]+1)
if arr[n] == 5001: # 정확하게 만들 수 없는 경우
    print('-1')
else:
    print(arr[n])

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(Python) 백준 9012번 - 괄호  (0) 2023.01.05
(Python) 백준 4949번 - 균형잡힌 세상  (2) 2023.01.05
(Python) 백준 2164번 - 카드 2  (0) 2023.01.04
(Python) 백준 1920번 - 수 찾기  (0) 2023.01.02
(Python) 백준 1018번 - 체스판 다시 칠하기  (0) 2023.01.02
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (Python) 백준 9012번 - 괄호
    • (Python) 백준 4949번 - 균형잡힌 세상
    • (Python) 백준 2164번 - 카드 2
    • (Python) 백준 1920번 - 수 찾기
    용꿀
    용꿀

    티스토리툴바