인프런 커뮤니티 질문&답변

ukson님의 프로필 이미지
ukson

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

활용 ( 바텀업 DP )

강의자료에서

작성

·

11

0

for x in range (1k+1): # 가방 무게가 x일 때

       # 물건을 담을 수 있을 때 (x보다  무게가 작거나 같을 때)

       if x < weight :

           dp[y][x] = dp[y-1][x]

      

       # 물건을 담을 수 없을 때 ( 전에 넣어뒀던 무게로 유지)

       else:

           dp[y][x] = max(dp[y-1][x],dp[y-1][x-weight] + value )

이렇게 나와있는데, x < weight이면 물건을 못담을때 아닌가요??

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

ukson 님께서 질문하신 부분은 강의에서 다루는 배낭 문제(Knapsack Problem)에서의 조건 표현 관련입니다. 말씀하신 부분에서 "x < weight"는 현재 가방의 남은 무게(x)보다 물건의 무게(weight)가 큰 경우를 의미합니다. 따라서 이 경우에는 물건을 담지 못합니다.

즉, 코드 상에서는 "x < weight" 조건문은 물건을 담을 수 없는 상황에 해당하며, 이때는 이전 상태를 유지해야 하므로 dp[y][x] = dp[y-1][x]로 설정됩니다.

반대로, else문 이하에서는, x >= weight인 경우, 즉 물건을 추가로 담을 수 있는 경우를 나타냅니다. 이 경우에는 물건을 담지 않을 때의 가치와, 물건을 담았을 때의 가치 중 더 큰 값을 선택하여 dp[y][x] = max(dp[y-1][x], dp[y-1][x-weight] + value)로 설정합니다.

배낭 문제에서 이와 같은 조건 설정은 매우 중요하며, 해당 조건에 따라 DP 상태 배열이 정확하게 갱신됩니다. 아래의 유사한 질문 링크에서 보다 상세한 설명을 보실 수 있습니다:

저는 질문자님의 이해를 돕기 위해 기존 관련 질문과 답변을 참고하여 설명드리고 있으며, 현재 베타 기능으로 제공되는 점 양해 부탁드립니다. 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다. 🙏

ukson님의 프로필 이미지
ukson

작성한 질문수

질문하기