문제 / 배낭(가방) 문제 - 냅색알고리즘 Knapsack algorithm / Python 파이썬

2023. 2. 27. 16:51·coding test - python/기본기 문제
728x90
반응형

 

문제 제목: 가방 문제

가방문제(냅색 알고리즘) 최고 17kg의 무게를 저장할 수 있는 가방이 있다. 그리고 각각 3kg, 4kg, 7kg, 8kg, 9kg의 무게를 가진 5종류의 보석이 있다. 이 보석들의 가치는 각각 4, 5, 10, 11, 13이다.

이 보석을 가방에 담는데 17kg를 넘지 않으면서 최대의 가치가 되도록 하려면 어떻게 담아야 할까요? 각 종류별 보석의 개수는 무한이 많다. 한 종류의 보석을 여러 번 가방에 담을 수 있 다는 뜻입니다.

 


냅색알고리즘 

 

첫 번째 줄은 보석 종류의 개수와 가방에 담을 수 있는 무게의 한계값이 주어진다. 

예를 들어 보석 종류의 개수는 4개, 무게의 한계 값은 11이라고 하자

 

1. 가방에 담을 수 있는 최대 보석의 무게의 한계값 만큼 리스트를 만든다.

 

 

for 문으로 해당 dy 리스트를 순회할 것이다.

dy[j] : 가방에 j 무게 보석의 최대 가치

 

두 번째 줄부터 각 보석의 무게와 가치가 주어진다.

첫번째 입력 : 5, 12

 

dy[j-w] + v

 

대충 의사코드를 짜보면

for j in range(len(dy)):
	if j >= w: # j가 w(보석 무게)보다 커야 리스트에 저장 가능
    		dy[j] = v + dy[j-w]

 

n, m=map(int, input().split())
dy=[0]*(m+1);
for i in range(n):
    w, v=map(int, input().split())
    for j in range(w, m+1):
        dy[j]=max(dy[j], dy[j-w]+v)
print(dy[m])

순회를 하면서 해당 값이 더 큰지 확인을 하고, 더 큰값을 저장해나감

최종적으로 m번째 값을 출력한다.

 


※ 알아야 할 것

- 변형된 것은 플로이드워샬 알고리즘

728x90
반응형

'coding test - python > 기본기 문제' 카테고리의 다른 글

기본기 JUNGOL / 도형 회전1 / Python 파이썬  (0) 2024.09.26
기본기 JUNGOL / 회전 / Python 파이썬  (1) 2024.09.26
문제 / 돌다리 건너기(Bottom-Up) - 동적계획법 / Python 파이썬  (0) 2023.01.10
문제 / 계단오르기(Top-Down : 메모이제이션) - 동적 계획법 / Python 파이썬  (0) 2023.01.10
문제 / 동전교환 / Python 파이썬  (1) 2022.10.13
'coding test - python/기본기 문제' 카테고리의 다른 글
  • 기본기 JUNGOL / 도형 회전1 / Python 파이썬
  • 기본기 JUNGOL / 회전 / Python 파이썬
  • 문제 / 돌다리 건너기(Bottom-Up) - 동적계획법 / Python 파이썬
  • 문제 / 계단오르기(Top-Down : 메모이제이션) - 동적 계획법 / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    programmers
    Python
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
문제 / 배낭(가방) 문제 - 냅색알고리즘 Knapsack algorithm / Python 파이썬
상단으로

티스토리툴바