해결된 질문
23.09.15 18:48 작성
·
251
답변 1
1
2023. 09. 16. 08:33
우상우님 안녕하세요 :)
작성해주신 코드 봤는데 말씀하신 대로 answer라는 전역 변수 관리가 잘못 됐기 때문인 것 같아요.
작성하신 코드에서는 answer를 늘리기만 하고 줄여주는 부분이 없기 때문에
answer라는 변수는 "dfs함수가 호출된 횟수"가 되고 있어요.
즉, 지금 문제의 문맥에서는 "나와 연결된 가족의 수"를 세고 있는 것인데,
우리가 원하는 건 start와 end의 촌수를 계산하는 거라서, 전체를 세는 것이 아니라
거리 계산을 하고 싶은 겁니다.
그래서 해결책은 크게 2가지, 지금처럼 전역변수를 쓰는 방식과 제가 제시한 parameter를 사용하는 방식이에요.
전역 변수를 사용하시려면 dfs를 호출하는 조건문 안에 다음과 같이 answer--를 다시 해주는 부분이 필요해요.
answer++;
dfs(i);
answer--;
이렇게 다시 빼줘야지 거리라는 개념이 되고 전체 가족 수가 되지 않습니다.
이런 식으로 전역변수를 매번 더했다 뺐다를 반복하는 것이 코드도 복잡하고 성능도 떨어지기 때문에,
강의에서 설명 드렸던 방식대로 parameter를 전달하는 방식을 사용했어요!
인자로 전달하면 answer를 증감하는 동작을 생략할 수 있습니다.
그동안 해왔던 전역변수 증감하는 방식과 약간 다른 문제라서 이것도 한번 쭉 써보시고,
answer라는 값이 dfs 호출마다 어떻게 변하는지, 그래서 어떻게 두 노드 간의 거리를 계산하는지 보시면
조금 더 명확하게 이해할 수 있을 것 같습니다.
혹시 부족한 점 있으면 또 질문 남겨주세요! 감사합니다 :)