16946. 벽 부수고 이동하기.

·2025년 9월 19일
0

백준 알고리즘

목록 보기
250/272

일반적인 생각.

: n * m 의 모든 정점에서 1인 타겟 pos를 얻어서 bfs를 순회해서 0인 지점을 카운팅하기에는 시간복잡도가 굉장히 커진다.

  • 타겟을 잡더라도 4방면으로 bfs를 시도해야 한다.
    : bfs 비용은 n X m 이기 때문에 최종적으로 n X m X n X m
    의 시간복잡도가 발생하기 때문에 일반적인 방법으로 접근하면 안된다.

생각해보기

  • 아래의 그래프를 가지고 생각해보면, 0,0 인 지점의 1을 가지고 아래의 3개 0칸을 순회한다.

  • 0,1인 지점의 1을 가지고 아래의 3개의 0칸을 순회한다.

  • 1,2인 지점의 1을 가지고 왼쪽 3개의 0칸을 순회한다.
    => 하나의 지점을 가지고 0이 있는 동일한 지점을 계속 순회하기에는 비효율적이라는 생각이 들지 않는가?

아이디어

  • 쉽게 생각해볼 수 있는 거는 0인 인접해 있는 구간을 하나의 그룹으로 만들어 놓고,
  • 인접한 1인 친구들이 접근할 때 해당 그룹에 있는 cnt값을 누적하면 위의 문제를 풀 수 있다.
    : 이런식으로

주의할점

  • 초록색 친구는 왼쪽과 위에 동일한 그룹인데, 중복해서 누적해야 할까????? 아니다! 이를 유념해서 작성하자.
profile
🔥🔥🔥

0개의 댓글