해결된 질문
작성
·
24
0
go라는 함수에서
ret을 -1e6으로 초기화 해야하나요?
왜 -1은 안되는것일까요?
0은 모금액 0일 수도 있기 때문에 가능하다고 납득이 됩니다.
하지만 문제에서 모금액은 1,000,000 이하의 자연수들이라는 조건이 있어서 음수가 나올 수가 없다고 생각합니다.
최소 -1,000,000 해야 정답 처리되더라구요
너무 궁굼해서 질문 올립니다.
답변 2
0
안녕하세요 ㅎㅎ
int go(int here, int _time){
if(here == n) return 0;
int &ret = dp[here][_time];
if(ret) return ret;
ret = -1e6;
이부분은 답이 될 수 없는 경우의 수를 없애는 역할을 합니다. 단순이 한 정점의 값이 -1이라면 누적해서 0이상의 값이 되어서 -> 답이 될 수 있는 범위가 되어 -> 노이즈가 되버립니다.
근데 -1e6을 하게 되면 해당 경우의 수가 제거되는 효과를 지니게 됩니다.
예를 들어,
a -> b -> c -> d라는 경우의 수랑
a -> b -> e -> f라는 경우의 수가 있습니다.
전자의 경우 c에서 안되는 경우가 발생해서 이 경우의 수를 제거해야 한다면 어떻게 해야할까요?
이 때 해당 정점에서 매우 큰 음수를 주어서 -> 답이 절대 될 수 없는 범위로 만들어 해당 경우의 수를 제거하는 기법이라고 보시면 됩니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. tjd125gns님.
ret
을 -1e6(-1,000,000)으로 초기화하는 이유는 주로 최솟값 초기화 시 가능한 모든 조합을 고려하기 위함입니다. 질문해주신 코드에서는 음수 값을 초기값으로 설정하여 불가능한 값으로 설정하게 됩니다. 이는 최대화 문제에서 초기값을 매우 작은 값으로 설정하여, 어떤 합산 또는 최대화 연산에서 정확한 값이 반영되도록 합니다.
-1로 초기화를 하지 않는 이유는, 어떤 경우에는 연산 과정에서 의도하지 않은 정수(-1)가 영향을 미칠 수 있기 때문입니다. 특히 고급 코딩 테크닉에서는 더 극단적인 음수 값(-1e6등)을 사용하여 오류 가능성을 최소화합니다.
이와 같은 맥락에서 ret = -1e6
으로 초기화하는 것은 잘못된 경로를 완전히 배제하기 위한 조치이며, 더 큰 값이 나오면 최대화 연산에서 올바르게 갱신될 수 있도록 만드는 것입니다.
아래의 링크는 관련 내용을 다루며 추가적인 설명을 제공합니다:
- 7-V 질문: 해당 질문에서 비슷한 내용을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.