• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

활용 DP 질문

24.03.19 21:51 작성 24.03.19 21:52 수정 조회수 120

2

선생님, 안녕하세요

다름이아니라 6강까지 꾸역꾸역 이해했다고 생각했는데 7강에서 막히네요

 

문제 1에서는 for문으로 변경할때 역순으로 dp를 채워주었는데 왜 문제 2냅색은 앞방향으로 for문을 도는건가요?

저는 6강에서 이해하기를 문제1, 문제2 모두 recursion을 통해 결국 맨 마지막 까지 도달한뒤 base condition을 통해 계산하면서 => 뒤에서 부터 계산하면서 dp를 채워준다고 생각했습니다

그리고 7강에서 recursion 대신에 for문을 통해 dp를 채워준다고 이해하고 강의를 보았는데요

 

문제1에 대해서는 for문을 역순으로 도는데 왜 문제2는 역순으로 돌지 않는지 잘 이해가 안갑니다. 둘의 차이가 뭔가요? 차이가 있다면 왜 6강에서는 둘다 똑같은 틀로 문제를 푼건가요?

 

정말 이해하고싶은데 어렵네요 ㅠㅠ

답변 2

·

답변을 작성해보세요.

1

먼저 6강의 문제는 상담문제를 말씀하시는 것 같은데 맞나요?

 

먼저 탑다운DP라는 이름처럼 탑(끝부분, 목표지점)에서 다운하면서(내려오면서, 인덱스 값이 감소하면서) 문제를 풀이하는 방법으로 알려드렸습니다.

 

상담 문제를 이해하셨다면, 계산식을 봤을때 마지막에 return 0을 받아서 돌아오면서 값을 계산하는 로직을 이해하시기에 크게 힘드시지는 않으셨을 거에요 🙂 [ 우리가 계산하고자 하는 최종 날짜를 기준으로 return 값을 받아오면서 계산한다. ]

 

이 다음에 바텀업으로 해당 로직을 변경하는 과정에서 순서는 둘 다 가능합니다! 역방향도 가능하고 정방향도 가능합니다! 그 중에 편하신 방법으로 만드시면 됩니다..! ( 저는 그냥 바로 떠오르는 방법으로 만듭니다..! )

( 확실히 지금 다시 강의를 돌려보니까 충분히 질문이 나올만한데 처음으로 받은 질문이네요.. 감사합니다!! )

 

탑다운 강의는 메모이제이션 방식, 문제 해결 방법을 경우의 수 쪼개기로 보여주는 강의이고

바텀업 강의는 탑다운DP에서 이해한 로직을 단순 반복문으로 바꿔서 바텀업DP로 만드는 강의입니다.

 

혹시라도 탑다운으로 코드를 짜는건 가능한데 바텀업으로 바꾸는건 어렵다고 하신다면.. 정말 어려운 관문은 다 넘기신거라 연습문제를 풀어나가시다보면 익숙해지시고 금방 DP 문제는 보자마자 해결 가능한 수준까지 올라가실겁니다..!! 😭 ( 이게 정말 별개 아닙니다.. 그냥 로직은 이미 이해하셨으니 그걸 반복문으로 표현하는 방법을 연습하기만 하면 됩니다..! )

 

완강 하신거 확인했습니다! 🙂 끝까지 봐주셔서 너무너무 감사합니다 ㅎㅎ

 

제 답변 보시고도 이해가 안되시면 계속 답글 남겨주세요!

2v2님의 프로필

2v2

질문자

2024.03.29

감사합니다 ! 센세 덕분에 막막했던 알고리즘 문제들이 좀 더 자신감이 생겼습니다ㅎㅎ 문제를 많이 풀면서 강의도 다시 들어볼게요 !

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.20

안녕하세요, 인프런 AI 인턴입니다.
2v2님, DP(Dynamic Programming)에 관한 질문을 주셨군요. 알고리즘을 공부하는 과정에서 DP 문제의 접근 방식에 대해 혼란을 겪으신 것 같습니다.

다이나믹 프로그래밍 문제를 푸는 과정에서 메모이제이션 위치에 따른 차이를 겪으신 것 같습니다. DP를 사용할 때에는 문제의 구조와 최적 부분 구조에 따라 접근 방식이 달라질 수 있습니다. 예를 들어, 특정 문제에서는 순방향으로 작은 문제부터 큰 문제로 접근해야 할 때도 있고, 다른 문제에서는 역방향으로 접근해야 할 경우도 있습니다.

문제 1에서는 역순(for문을 거꾸로 도는 방식)으로 DP를 채워가는 것이 문제의 구조상 최적 해를 구하는 데 적절했기 때문에 그런 방식을 취했고, 문제 2에서는 순방향으로 for문을 돌면서 각 단계의 최적 해를 구하는 것이 더 적절했으리라 생각됩니다.

6강에서 두 문제 모두 같은 틀로 접근하셨다면, 그것은 문제의 다양한 해결 방식 중 하나를 배우는 과정일 수 있습니다. 일반적으로 DP 문제를 해결하다 보면 같은 문제라도 다양한 접근 방법이 존재하며, 각 접근 방법에 따라 작성하는 코드의 흐름이 달라질 수 있습니다.

DP 문제를 이해하는 것은 어렵고 시간이 필요한 과정입니다. 단계적으로 문제를 풀어보고, 왜 이러한 접근 방식이 적용되었는지를 분석해보는 시간을 가질 필요가 있습니다. 직접 다양한 문제를 풀어보면서 순방향, 역방향 접근법이 어떤 경우에 적합한지 경험을 통해 체화하는 것이 중요합니다.

혼자 이해하기 어려운 부분이 있다면, 해당 강의의 Q&A 섹션을 이용하거나 동료 학습자 및 커뮤니티에 질문하여 도움을 받는 것도 좋은 학습 방법입니다.

끝으로, 6강과 7강의 내용을 완벽하게 이해하기 위해서는 실제 강의 커리큘럼과 내용을 자세히 살펴보는 것이 필요하겠습니다. 추가로 궁금한 점이 있으시다면 강의 내 Q&A 섹션에 질문을 올리시거나, 인프런에 직접 문의해 보시는 것도 좋은 방법이 될 것 같습니다.

힘든 과정이지만 조금씩 천천히 문제를 풀어가며 DP에 대한 깊은 이해를 쌓아가시길 바랍니다. 화이팅입니다!