강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

촌수계산 (백준 2644)

dfs 파라미터에 count를 넣는이유

해결된 질문

작성

·

20

·

수정됨

1

안녕하세요. 기존처럼 dfs함수내에서 함수가 실행될때마다 answer++를 해서 조건에 일치 할 떄 그냥 answer를 출력하게해도 될것같은데

count라는 파라미터는 answer를 -1로 초기화를 해놨기 때문에 넣는건가요?

 

아니면 answer로 하면 단순 dfs 함수 호출 횟수를 늘리는거고, 이 문제의 본질은 트리의 depth를 물어보는거가 되는거고 그래서 count로 depth를 알려주는건가 싶습니다

답변 2

1

안녕하세요,

 

우선 두번째로 이부분에 정리하신 내용이 맞습니다!

아니면 answer로 하면 단순 dfs 함수 호출 횟수를 늘리는거고, 이 문제의 본질은 트리의 depth를 물어보는거가 되는거고 그래서 count로 depth를 알려주는건가 싶습니다

 

자세하게 부연 설명을 추가하면 이렇습니다.

dfs 함수에 count 파라미터를 넣는 이유는 현재 노드까지의 거리를 추적하기 위함입니다. answer 변수를 단순히 전역으로 선언하고 dfs 함수 내부에서 answer++를 하는 방식은 올바른 촌수를 계산하지 못할 수 있습니다.

​이유:

​올바른 촌수(거리) 계산: 이 문제는 시작 노드에서 목표 노드까지의 가장 짧은 거리를 찾는 것입니다. dfs(idx, count)처럼 재귀 호출 시 count + 1을 파라미터로 넘겨주면, 각 함수 호출마다 현재 노드까지의 거리가 정확하게 계산됩니다.

​전역 변수 문제: 만약 answer를 전역 변수로 두고 answer++를 한다면, 재귀 호출이 끝난 후 다른 경로를 탐색할 때 answer 값이 그대로 유지되어 올바르지 않은 값이 나올 수 있습니다. 예를 들어, dfs 함수가 깊이 3까지 들어갔다가 백트래킹(backtracking)을 할 때, answer 값은 3이 된 상태로 남아있게 됩니다. 새로운 경로를 탐색할 때 이전에 증가한 answer 값부터 시작하게 되므로, 정확한 거리를 계산할 수 없습니다.

​지역적 범위와 재귀의 특징: count 파라미터는 함수 호출 시마다 독립적인 값으로 전달됩니다. 이는 각 재귀 호출이 자신의 count 값을 가지게 되어, 여러 탐색 경로가 서로 영향을 주지 않고 독립적으로 거리를 계산할 수 있게 해줍니다. 즉, 한 경로가 실패하여 돌아오더라도 다른 경로를 탐색할 때 초기 상태인 0부터 다시 시작할 수 있습니다.

​결론적으로, count 파라미터는 dfs가 재귀적으로 여러 경로를 탐색하는 과정에서 각 경로의 깊이(거리)를 정확하게 측정하기 위한 필수적인 요소입니다.

0

안녕하세요, 인프런 AI 인턴입니다. dnrwls9115님께서 남겨주신 질문에 대한 답변을 드리겠습니다.

DFS를 사용하는 알고리즘에서, count라는 파라미터를 사용하는 이유는 주로 경로의 길이나 깊이를 추적하기 위해서입니다. count를 파라미터로 넘겨주게 되면, 재귀 호출마다 count 값이 증가하면서 경로의 길이를 정확하게 계산할 수 있습니다. 이렇게 하는 것이 전역 변수 answer를 사용하는 것보다 코드의 명확성과 안정성 측면에서 더 안전합니다.

전역 변수를 사용하는 경우, DFS 호출이 끝난 뒤에 값이 누적되거나 잘못된 결과를 초래할 수 있습니다. 이 때문에 전역 변수 대신 매개변수를 사용하면 재귀 호출의 특성상 각 경로에서의 count 값이 영향을 받지 않기 때문에, 보다 정확한 결과를 얻을 수 있습니다.

더 자세한 설명을 보고 싶으시면 아래의 답변 링크를 참고하세요:
- 촌수계산질문: count의 사용 목적에 대한 설명이 잘 되어 있습니다.
- 2644 촌수계산 문제에 관한 질문: 전역 변수와 매개변수 사이의 차이에 대해 다룹니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

질문하기