inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

9. 가방문제(냅색 알고리즘 : Knapsack algorithm)

안녕하세요 선생님. 코드 질문이 있어서 질문 남겨봅니다.

251

조현수

작성한 질문수 7

0

선생님께서 풀어주신 dp 1차원 테이블 코드 말고도 2차원 dp 테이블로 풀어보았는데 해당 코드가 어떤 문제가 있는지 모르겠습니다.

import sys
sys.stdin = open("input.text", "rt")
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

data = []
n, limit = map(int, input().split()) #보석 종류, 무게 한계값
for _ in range(n):
    a,b = map(int, input().split())
    data.append((a,b)) #무게, 가치
data.insert(0,(0,0)) #0번 인덱스 사용안함
dp = [[0] * (limit+1) for _ in range(n+1)]

for i in range(1,n+1):
    for j in range(1,limit + 1):
        weight = data[i][0] # 현재 물건 무게
        value = data[i][1] # 현재 물건 가치

        if j < weight: #현재 물건 담을 수 없으니 이전꺼 가져와야함
            dp[i][j] = dp[i-1][j]
        else: #현재 물건 담을 수 있음
            dp[i][j] = max(dp[i-1][j-weight] + value, dp[i-1][j])

print(dp[n][limit])

해당 문제를 백준 배낭 냅색 알고리즘 문제에 제출하면 100점이 뜨는데 여기 문제에 예시를 출력해보면 28이 아닌 26이 나옵니다.. 어떤 것이 문제인지 모르겠고

 

dp 2차원을 최적화해서 1차원으로 만든 것인데 문제가 어디 부분인지 감이 안옵니다.

 

미리 답변 감사합니다 !

 

python 코딩-테스트 코테 준비 같이 해요!

답변 1

0

김태원

안녕하세요^^

위에 코드처럼 2차원으로 하면 한 종류의 보석을 2개 이상 가방에 담을 수 없는 코드입니다.

위에 코드는 한 종류의 보석을 딱 하나만 가방에 넣는 코드입니다. 즉 문제의 입력예시로 보면 3g짜리 보석을 2개 담아야 하는데 위에 코드는 1개만 담는 경우만 계산하고 있습니다.

dp[i-1][j-weight]값은 i-1번 보석까지 적용되어 있고, i번 보석은 적용되지 않은 값이라는 것을 생각해보세요.

기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.

1

78

2

스택에서 ')'을 만나는 경우

0

80

3

문제가 어디있나요?

0

67

2

변수 or 함수명

0

62

1

침몰하는 타이타닉 문제 질문입니다

0

59

1

AA.py 책점 에러

0

60

1

오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.

0

111

2

5.동전분배하기 문제 밑에코드도 정답이될까요?

0

110

1

아나그램 비교 코드

0

116

2

AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.

0

161

2

문제 링크가있나여?

0

147

2

채점기 Time Limit Exceeded 오류 문의

1

166

2

동적계획법은 사용하는 문제

0

126

2

제 코드 좀 봐주세요

0

148

1

예외가 존재할 가능성?

0

97

1

3번이 안풀립니다

0

95

0

5번 틀림

0

115

0

오류원인?

0

99

0

리스트 선언

0

108

1

침몰하는 타이타닉(그리디) 문제 질문

0

111

1

알고리즘

0

70

1

코딩테스트

0

93

1

DFS 순서 질문드립니다.

0

129

2

left, right를 사용한 풀이법에 대한 질문입니다

0

91

1