n과 m이 각각 1000이고, 어디다가 safe zone 을 만들지
그리고 몇개를 만들지 정하기는 논리적으로 생각해도
굉장히 시간복잡도가 높을 것으로 예상된다.
=> 완탐 불가.
최소 cnt여서 bfs를 생각했는데 정해진 dir 으로만 이동이 가능하므로
=> bfs 아니다.
문제 입력이랑 아래의 그림을 보면,, safe zone은 정말로
저기에 있는 2개만 설정할까?? 를 생각했다.
문제 입력 그대로 따라가면, cycle 이 이루어진다고 생각을 함.
이어서 굳이 safe zone을 저기 2개로 fix 할 필요 없다는 생각을 했다.
그래서 그냥 빨간색 부분을 보면, cycle에 속하는 정점 중 하나만 선택하면 되겠구나 싶어서 dfs - 사이클 판별 알고리즘으로 진행함.
그래서 아래와 같은 코드 제출
=> 작성후 제출 했더니 틀린다.... 음....
: 위의 코드는 굳이 cycle 완성하지 않더라도 IsCycle 호출하면 그냥 카운팅하는 것이다. 그래서 설마 사이클을 완성해야 하는 것인가??? 를 생각함.
이거는 safeZone 1개만 있으면 된다!!
그래서 cycle 이 완성되는 순간에 check = true로 해서
check == true 인 경우에만 cnt++ 하기로 변경함.
IsCycle 에서 cycle 이룰 때 check = true 했다.