else문 내를 다르게했더니 출력이 이상합니다.
258
작성한 질문수 5
path[L] = +a[L];
s += a[L];
DFS(L + 1, s);
path[L] -= a[L];
s -= a[L];
DFS(L + 1, s);
path[L] = 0;
DFS(L+1, s);
dfs함수의 else문 내를 이렇게 s를 따로 계산하고 s를 넘겨주니, 2460이 두번 출력됩니다.
선생님 코드와의 차이는 s-a[L]을 넘겨줬느냐 계산후 넘겨줬느냐 인데 어떤 차이 때문인가요?
답변 2
1
else{
s=s+a[L];
DFS(L+1, s);
s=s-a[L]
DFS(L+1, s);
DFS(L+1, s);
}
위의 코드를 가지고,
영상에서 처럼 처음 DFS(1, 0)으로 시작해서 2+4+6 까지 s에 더하고 8을 적용하는 함수인 DFS(4, 12) 함수를 가지고 설명하겠습니다.
s=s+a[L]; //s=12+8이 되어 매개변수 s=20이 됩니다.
DFS(L+1, s); //DFS(5, 20)으로 호출이 일어납니다.
s=s-a[L]; // s=20-8이 되어 s=12가 됩니다. 여기서 중요한게 되돌아 왔을 때 매개변수 s의 값은 20입니다. 위 코드 s=s+a[L]에서 DFS(4, 12)의 매개변수 s를 20으로 바꾸었다는 것을 명심하세요. 즉 이 코드는 s=s+a[L]에서 8을 더한 것을 다시 8을 빼주어 원래 s값인 12로 되돌리는 효과입니다.
DFS(L+1, s); //DFS(5, 12) 가 호출되어 2+4+6-8인 상황인데 s는 4가 아니라 12로 넘어간다는 것이 오류입니다.
DFS(L+1, s); //DFS(5, 12)가 호출됩니다. 2+4+6 상황으로 여기는 맞는 경우입니다. 여기가 맞을 수 있는 것은 s=s-a[L]에서 원래의 s값이 12로 바꾸어 놓았기 때문입니다.
결론은 DFS(4, 12)의 매개변수인 s를 함수 안에서 바꾸면 안되는 것입니다. 함수 안에서는 계속 12를 유지해야 합니다.
스스로 상태트리를 그려가면서 집요하게 분석해 보세요.
테스트 케이스 질문
0
373
1
병합정렬 시간복잡도 질문
0
462
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1345
2
질문드립니다.
0
376
1
질문드립니다!
0
430
1
dev 프로그램 질문
0
275
1
문제가 이해가 안되요
0
376
1
4번 나이차이 문제 접근법 질문 드립니다.
0
307
1
source file not compiled
0
1047
3
59번 질문드립니다.
0
372
1
25번 문제 질문
0
349
1
4. 나이차이 문제 질문입니다.
0
372
1
90번 라이언 킹 심바 1번 테스트 케이스
0
470
1
71번 문제 전역 변수 질문 있습니다
0
365
1
75번, 79번 priority_queue관련
1
355
1
75.최대 수입 스케줄
0
400
2
복면산 정답의 수
0
431
1
테스트 케이스에 대해서
0
445
1
수업 내용 질문입니다!
1
232
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
822
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
254
1
다른 풀이 방식
0
317
1
크루스칼 vs 프림
0
306
1
숫자 총개수 small 질문있습니다.
0
242
1





