inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2차원 DP

2차원 DP 1번 문제

해결된 질문

386

한혜경

작성한 질문수 6

1

안녕하세요, 추가강의를 듣다가 2가지 질문사항이 생겨 다시 글을 쓰게 되었습니다.^^

 

위 문제를 설명해주실 때,

처음에 recur으로 접근하신 후 dp로 바꿔서 설명을 해주셨는데요,

15:45 부분에서 설명해주신 내용 중

return으로 인해 계산이 끝나지 않고 이웃 칸으로 이동해서 계속해서 계산을 이어가도록 하는 부분이

return 0return dp[y][x] 로 바꾸는 부분에 해당하는 것인지 질문드립니다.

 

또한, 마지막에 답을 출력할 때,

print(max(map(max,dp))+1

왜 +1을 해주는지 궁금합니다.

 

[정답 코드]

오늘도 감사합니다~

python 코딩-테스트 알고리즘

답변 2

0

코딩 센세

질문 감사합니다!

 

문제를 설명해주실 때,

처음에 recur으로 접근하신 후 dp로 바꿔서 설명을 해주셨는데요,

15:45 부분에서 설명해주신 내용 중

return으로 인해 계산이 끝나지 않고 이웃 칸으로 이동해서 계속해서 계산을 이어가도록 하는 부분이

return 0return dp[y][x] 로 바꾸는 부분에 해당하는 것인지 질문드립니다.

네, 맞습니다! 진행하는 공간까지의 모든 경우의 수를 확인해서 최적의 값을 DP에 저장하고, 그 DP 값을 바탕으로 그 다음 값을 계산함으로써 현재까지 최적의 경우의 수를 바탕으로 계산을 이어갈 수 있습니다 ㅎㅎ

또한, 마지막에 답을 출력할 때,

print(max(map(max,dp))+1

왜 +1을 해주는지 궁금합니다.

제가 만든 계산식은 몇 번을 이동했는가 를 계산하고 있는데, 문제에서는 몇 칸을 이동했는지를 묻고 있기 때문에 +1이 됩니다! ( 시작점을 포함해야해서 그렇습니다 🙂 )

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용에 대해 답변 드리겠습니다.

첫 번째 질문에 대한 답변입니다.
return 0return dp[y][x]로 바꾸는 이유는 이미 계산된 dp의 값을 재사용하기 위함입니다. 이는 동적 계획법(Dynamic Programming)의 기본 개념 중 하나인 메모이제이션(memoization)을 활용한 것으로, 한 번 계산된 결과를 저장해두었다가 같은 계산을 반복하지 않도록 하여 프로그램의 효율성을 높이는 방법입니다.

두 번째 질문에 대한 답변입니다.
print(max(map(max, dp)) + 1 에서 +1을 해주는 것은, dp 테이블이 0부터 채워지기 시작하여 실제 최댓값을 구할 때는 +1을 해줘야 정확한 결과를 얻을 수 있기 때문입니다. 쉽게 말해, 문제의 조건이나 구현 방식에 따라 배열의 인덱스는 0부터 시작하지만, 실제 문제에서 요구하는 계산 결과는 1부터 카운트될 수 있으므로 구한 결과에 +1을 해주어야 최종 해답이 됩니다.

정답 코드가 포함된 이미지가 검은색으로 보이는데, 해당 이미지에 오류가 있을 수 있으므로 실제 정답 코드를 확인하시려면 강의 제공자 또는 인프런 고객 지원을 통해 접촉하시는 것을 권장합니다.

추가적인 질문이나 궁금한 점이 있으시다면 언제든지 문의하시기 바랍니다.
오늘도 즐거운 학습 시간 되세요~

0

한혜경

첫 번째 질문)

return dp[y][x] 부분이 2곳이라서 재질문 드립니다.

말씀하신 dp값 재사용 부분은 (line 12)

if dp[y][x] != -1:

return dp[y][x]

이 부분으로 이해하고 있는데 아닌가요?

제가 질문드린 부분은 아래 정답코드 line 23에 해당하는 부분입니다.

image강의에서는 처음에 line 23번을 return 0 으로 두고 recursion으로 접근해서 질문드렸었습니다.

또한 두번째 답변도 잘 이해가 되지 않습니다. ㅜㅜ

"dp 테이블이 0부터 채워지기 시작하여 실제 최댓값을 구할 때는 +1을 해줘야 정확한 결과를 얻을 수 있기 때문입니다. 쉽게 말해, 문제의 조건이나 구현 방식에 따라 배열의 인덱스는 0부터 시작하지만, 실제 문제에서 요구하는 계산 결과는 1부터 카운트될 수 있으므로 구한 결과에 +1을 해주어야 최종 해답이 됩니다."

적어주신 설명만으로는 이해가 되지 않네요.. 혹시 조금 더 자세히 설명해주실 수 있으신가요?

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