inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

활용 ( 바텀업 DP )

[활용(바텀업DP)] 8:08, 10:55

해결된 질문

509

개발자아닙니다

작성한 질문수 23

1

안녕하십니까 코딩센세!

 

이번에도 어김없이 질문 드리고 싶은 부분이 있어서 질문글을 남겨봅니다.

 

활용(바텀업 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강에 대한 정답 코드는 볼 수 없는건가요? 수업자료에 작성되어 있지 않아서 문의드립니다.

python 코딩-테스트 알고리즘

답변 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] 이해하신 바가 맞습니다! 언급하신 부분이 단순하게 탑다운>바텀업 변환을 하면서 설명하는 부분이라 설명에 생략이 있어서 그렇습니다..!

 

위 코드로 한번 더 풀어보시고 어려우시면 또 답글 남겨주세요!

 

항상 질문 보내주시는 거 보면서 큰 힘이 되고 있습니다 ㅎㅎ

 

신년도 화이팅입니다! ( 혹시 앱강의도 관심이 있으시다면 지금 만들고 있는데 나중에 무료로 보내드릴테니 꼭 한번 들어봐주세요! )

1

개발자아닙니다

감사합니다 센세!!

새해 복 많이 받으시구요! 제가 메일도 드렷는데, 시간 나실 때 한 번 확인 부탁드립니다. 멘토링도 조만간 받고 싶어요

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