작성자님께서 말씀하시는 "mid값보다 크면"이 DFS 함수 내의 얘기인지, 아니면 main 함수에서의 얘기인지 구분이 잘 되지 않으므로 2가지 경우로 나눠서 설명하겠습니다.
- 주어진 DFS 함수 내에서, 처음 선택한 다리보다 더 튼튼한 다리가 존재한다면
→ 제시해 주신 코드는 이분탐색으로 최대 무게를 찾는 방식이기에, DFS 함수가 실행되는 동안의 midval은 고정되어 있습니다.
즉, 매우 튼튼한 다리든, 매우 부실한 다리든, DFS 함수 내에서는 midval의 무게를 견뎌내기만 하면 됩니다.
주어진 DFS 함수의 역할은, 출발지점에서 목적지점까지 midval만큼의 무게를 가진 채로 도달할 수 있는지의 여부를 확인하는 것, 그 이상도 그 이하도 아닙니다.
따라서, A에서 B로 가는 다리들 중에서 midval보다 큰 다리가 여러 개가 있다 해도, 방문 여부를 false로 변경하고 다시 돌아갈 필요가 없습니다.
어차피 midval의 값은 고정되어 있습니다. - main 함수에서, DFS 함수가 반환한 값에 따라 새로운 midval을 정한 뒤, 다시 DFS 함수를 실행한다면
→ 이 경우를 걱정하셔서 방문했던 장소의 방문 여부를 false로 변경하신 거라면, 걱정하실 필요가 없습니다.
작성자님께서 midval을 while문에서 매번 변경하듯이, 방문 여부를 확인하는 read도 매번 새로 할당되니까요.
gmltjs4163 4년 전
dfs와 이분탐색을 이용해서 문제를 풀었는데 시간초과가 났습니다. 그리고 38째줄을 주석처리했더니 성공하였습니다. 하지만 false처리를 하지 않아도 되는게 이해가 가지 않습니다. 어찌됐든 mid값보다 크면 계속적으로 재귀를 해줘야 하기 때문에 읽지 않은 노드를 false로 처리해줘야 하는거 아닌가요??