16724번. 피리 부는 사나이.

·2025년 7월 31일
0

백준 알고리즘

목록 보기
205/270

문제 해결 전략

  • n과 m이 각각 1000이고, 어디다가 safe zone 을 만들지
    그리고 몇개를 만들지 정하기는 논리적으로 생각해도
    굉장히 시간복잡도가 높을 것으로 예상된다.
    => 완탐 불가.

  • 최소 cnt여서 bfs를 생각했는데 정해진 dir 으로만 이동이 가능하므로
    => bfs 아니다.

  • 문제 입력이랑 아래의 그림을 보면,, safe zone은 정말로
    저기에 있는 2개만 설정할까?? 를 생각했다.
    문제 입력 그대로 따라가면, cycle 이 이루어진다고 생각을 함.

  • 이어서 굳이 safe zone을 저기 2개로 fix 할 필요 없다는 생각을 했다.

  • 그래서 그냥 빨간색 부분을 보면, cycle에 속하는 정점 중 하나만 선택하면 되겠구나 싶어서 dfs - 사이클 판별 알고리즘으로 진행함.

  • 그래서 아래와 같은 코드 제출

=> 작성후 제출 했더니 틀린다.... 음....
: 위의 코드는 굳이 cycle 완성하지 않더라도 IsCycle 호출하면 그냥 카운팅하는 것이다. 그래서 설마 사이클을 완성해야 하는 것인가??? 를 생각함.

  • 내 생각에는 과연 파란색 부분 r과 l 이 사이클을 이루어야 하는 것인가? 를 생각했다. 둘다 r r 이라고 한다면

  • 이거는 safeZone 1개만 있으면 된다!!
    그래서 cycle 이 완성되는 순간에 check = true로 해서
    check == true 인 경우에만 cnt++ 하기로 변경함.

  • IsCycle 에서 cycle 이룰 때 check = true 했다.

profile
🔥🔥🔥

0개의 댓글