[활용(바텀업DP)] 8:08, 10:55
안녕하십니까 코딩센세!
이번에도 어김없이 질문 드리고 싶은 부분이 있어서 질문글을 남겨봅니다.
활용(바텀업 DP) 수업에서, 8:08초와 10:55초 에서 작성하신 if문이 잘 와닿지가 않습니다.
8:08초의 경우, if idx+ interview[idx][0] > N 으로 작성하셨는데요. 설명 역시 논리적으로 다가왔습니다. 당연히 문제에서 주어진 N의 범위보다 크다면 인덱싱이 불가능할테니 idx보다 더 뒤에 있는 dp[idx+1]의 값으로 할당하는 거라고 이해했습니다.
문제는 10:55초 입니다. 작성하신 코드는 if weight < B 인데요. 부연 설명은 "가방의 무게보다 작으면 예외 처리를 한다"라고 이해했습니다. 문제의 요구사항에 따르면 가방의 무게보를 초과했을 때 예외처리를 해야 하지 않나? 라는 의문이 들었는데요. 아직 의문을 해결하지 못하여 선생님의 코드가 잘 이해가 되지 않는 상태에 있습니다...
저의 질문을 읽어주신다면, if weight < B 라고 조건을 걸어야 하는 부분에 대해 조금 더 상세한 설명을 부탁드립니다!
p.s. 선생님 혹시 7강에 대한 정답 코드는 볼 수 없는건가요? 수업자료에 작성되어 있지 않아서 문의드립니다.
답변 1
1
이제 DP도 다 들어 가시는군요!!! 기쁩니다!!! ( 탑다운 디피 질문 없이 바로 바텀업까지..!! 빠르게 성장을 하고 계시군요!! )
아래 도움이 되실까 싶어서 코드를 한번 보기 쉽게 바꿔봤습니다! ( 정답 코드는 제가 빼먹고 안넣었네요..! )
import sys
input = sys.stdin.readline
# 입력 받기
ItemNumber, MaxBagWight = map(int, input().split())
items = [list(map(int, input().split())) for _ in range(ItemNumber)]
dp = [[0 for _ in range(MaxBagWight+1)] for _ in range(ItemNumber+1)]
# 물건을 하나씩 고릅니다.
for ItemIndex in range(ItemNumber):
ItemWeight = items[ItemIndex][0]
ItemValue = items[ItemIndex][1]
# 가방 무게가 0일때부터 최대무게일때까지 가정합니다.
# ( 무게를 모두 사용하지 않아도 정답인 경우가 있을 수 있음 )
for BagWeight in range(MaxBagWight+1):
# 조건문
# 물건을 가방에 담을 수 없다면 전에 넣어뒀던 무게로 유지
if BagWeight < ItemWeight:
dp[ItemIndex][BagWeight] = dp[ItemIndex-1][BagWeight]
# 그 외
# 물건을 넣을 수 있다면 넣어보고 무게 비교하기
else:
dp[ItemIndex][BagWeight] = max(
dp[ItemIndex-1][BagWeight-ItemWeight] + ItemValue, dp[ItemIndex-1][BagWeight])
print(items)
print(dp)
print(dp[ItemNumber-1][MaxBagWight])
문제는 10:55초 입니다. 작성하신 코드는 if weight < B 인데요. 부연 설명은 "가방의 무게보다 작으면 예외 처리를 한다"라고 이해했습니다. 문제의 요구사항에 따르면 가방의 무게보를 초과했을 때 예외처리를 해야 하지 않나? 라는 의문이 들었는데요. 아직 의문을 해결하지 못하여 선생님의 코드가 잘 이해가 되지 않는 상태에 있습니다...
남은 가방 무게보다 아이템 무게가 클 때 예외처리를 하는 것임으로 [BagWeight < ItemWeight] 이해하신 바가 맞습니다! 언급하신 부분이 단순하게 탑다운>바텀업 변환을 하면서 설명하는 부분이라 설명에 생략이 있어서 그렇습니다..!
위 코드로 한번 더 풀어보시고 어려우시면 또 답글 남겨주세요!
항상 질문 보내주시는 거 보면서 큰 힘이 되고 있습니다 ㅎㅎ
신년도 화이팅입니다! ( 혹시 앱강의도 관심이 있으시다면 지금 만들고 있는데 나중에 무료로 보내드릴테니 꼭 한번 들어봐주세요! )
0
메일이 확인이 안되는데 혹시 sonjungwoo9@gmail.com으로 보내신 게 맞으실까요?
한번 더 보내주시면 감사하겠습니다 🙂 그리고 발송하신 메일 주소나 메일 제목 알려주시면 제가 한번 더 확인해보겠습니다!
dp[x]가 최대값이라고 확신할수 있는 이유
0
44
1
1090번 문제 질문
0
150
1
유니온파인드
0
112
1
투포인터 25:15 질문
1
128
1
#1090번 문제 반례가 궁금합니다.
0
148
1
예제코드 자바입니다
1
186
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
102
0
코드 오류
0
185
1
2강 정수론 문제3 #1407 질문
0
126
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
193
2
[Python] 백준 1090번 문제
1
226
3
강의자료에서
1
162
2
2503 문제 제한 조건 질문!
1
249
2
백준 22988 번 문제
1
193
1
추가 강의 순서
1
180
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
221
2
7강 RGB 색칠하기 질문 있습니다.
1
160
2
정수론 약수 빠르게 구하기 질문
1
257
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
373
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
223
2
누적합 문제 3번 질문
1
216
2
기억 ( 누적합 ) 강의 11660 문제
1
163
2





