dhrudgns529   2년 전

이 문제에 대한 코드는 다음과 같이 구현했습니다.

제가 노가다로 생각해 봤을때 맞다고 생각되어지는데 아니라고 합니다.

ex) 3 3 

AAA

AAB

BBB

이 경우 생각을 해보았습니다.

1. dfs(0,0,0,0,0) 실행되어 if문을 지나고, for문- i가 0일 때 if문 만족하여 visited[0][1] = True 후 

2. dfs(0,1,0,0,1) 실행 if문 지나고, for문- i가 0일때 if문 만족하여 visited[0][2] = True 후

3. dfs(0,2,0,0,2) 실행 if문 지나고, for문에서 만족하는 경우가 없어 return 후

4. 2.의 경우를 다시 실행 visited[0][2]를 False 처리 후, for문- i가 1일때 if문 만족하여 visited[1][1] = True 후

5. dfs(1,1,0,0,2) 실행 if문 지나고, for문- i가 0, 1는 if문 만족X, i가 2일 때 if문 만족하여 visited[1][0] = True 후

6. dfs(1,0,0,0,3) 실행 if문 지나고, for문- i가 0,1,2는 if문 만족X, i가 3일 때 if문 만족하여 visited[0][0]= Ture 후

7. dfs(0,0,0,0,4) 실행 if문 처음 위치로 돌아오고 cnt >= 4 이상을 만족하여 return True로 함수 종료

8. 25번째 줄의 if문 만족하여 'Yes'를 출력하고 exit()를 사용하여 종료

아래 코드를 이런 식으로 해석했는데 잘못된 부분 있으면 알려주시면 감사하겠습니다. ㅠㅠ

알다가도 모르겠습니다...

부탁드립니다!

dlgustmd3590   2년 전

재귀함수라서 발생한 문제라고 봅니다.

정확하게 어떤 현상이라고 정의하지는 못하겠으나 (제가 실력이 모자란 관계로..)

재귀함수는 각각의 경우에 해당하는 함수를 실행시킵니다.

그러니까.. return값이 하나가 아닌겁니다.

조건문으로 사용하지 마시고 print로 찍어보시면 아실거라 생각합니다.

True와 None이 쏟아저 나오는걸 확인하실 수 있을겁니다.

exit을 조금 도 효율적으로 사용한다면

return True 부분을

print("Yes")
exit()

으로 변경한다면

답이 나오는 즉시 프로그램을 종료시킬 수 있습니다.


조건에 맞는 경우가 하나도 없다면

28번째 줄에 작성하신 print("No")가 실행될테구요


그러면 무난히 통과하실거라고 생각합니다.

댓글을 작성하려면 로그인해야 합니다.