2018년 9월 11일 화요일

백준 9466 텀프로젝트, 재귀 주의 사항

dfs 재귀를 돌릴 때, visited값이 0이면 dfs함수를 재귀 호출하고, visited값이 1이면 flag값이 같은 경우만 dfs함수를 재귀 호출했는데...

if visited == 0
    ...
    dfs
    ....
if visited == 1
    ...
    dfs
    ...

이런 식으로 했다가 틀려서... 원인 찾는데 매우 힘들었다...
다행히 질문 검색에서
1
5
5 3 4 5 1
라는 반례를 올려주신 분이 계셨는데, 
저 반례를 가지고도 원인 파악하는데 시간이 엄청 결렸다.

내가 착각하고 있던 것이... 당연히 if문 하나로만 들어갈 것으로 착각했는데, 알고보니, dfs함수를 타고 들어가면서 visited값이 업데이트(0 -> 1) 되어 그 다음 if문의 dfs로 또 들어가게 되는 것이었다...
그래서 두번째 if문을 else if로 고쳐서 AC를 받았다...

아주 기본적인 것인데도, 원인을 찾지 못하고, 반례를 알고도 직접 출력을 해보며 디버깅해보고 나서야 겨우 원인을 파악했다... 반성하자...

댓글 없음:

댓글 쓰기