inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Nhập môn giải bài toán bằng thuật toán cho việc làm CNTT (với C/C++): Luyện thi viết mã

61. Tạo một số cụ thể (Câu hỏi phỏng vấn MS: Tìm kiếm toàn diện DFS)

else문 내를 다르게했더니 출력이 이상합니다.

307

OneLine

5 câu hỏi đã được viết

1

                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]을 넘겨줬느냐 계산후 넘겨줬느냐 인데 어떤 차이 때문인가요?

C++ 코테 준비 같이 해요!

Câu trả lời 2

1

codingcamp

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

OneLine

감사합니다. 인위적으로 스택프레임내에서 매개변수를 바꾼것이 꼬이게 만드는 것이군요.

테스트 케이스 질문

0

433

1

병합정렬 시간복잡도 질문

0

512

1

41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.

0

1430

2

질문드립니다.

0

439

1

질문드립니다!

0

476

1

dev 프로그램 질문

0

303

1

문제가 이해가 안되요

0

423

1

4번 나이차이 문제 접근법 질문 드립니다.

0

342

1

source file not compiled

0

1155

3

59번 질문드립니다.

0

425

1

25번 문제 질문

0

454

1

4. 나이차이 문제 질문입니다.

0

416

1

90번 라이언 킹 심바 1번 테스트 케이스

0

505

1

71번 문제 전역 변수 질문 있습니다

0

397

1

75번, 79번 priority_queue관련

1

399

1

75.최대 수입 스케줄

0

439

2

복면산 정답의 수

0

472

1

테스트 케이스에 대해서

0

490

1

수업 내용 질문입니다!

1

268

1

풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!

0

896

2

12. 플로이드-와샬(그래프 최단거리) . 27:25초

0

289

1

다른 풀이 방식

0

355

1

크루스칼 vs 프림

0

353

1

숫자 총개수 small 질문있습니다.

0

266

1