본문 바로가기

알고리즘/Baekjoon

BFS. [14502]

[1. 문제 설명]

https://www.acmicpc.net/problem/14502


[2. 풀이 접근]

그래프 순회가 필요한 이유

  • 이차원 배열에서 바이러스가 퍼져나간다.
  • BFS 를 통해 이러한 과정을 모델링 할 수 있다.

완전 탐색

  • 지도의 최대 크기는 8x8 이며, 여기서 반드시 벽을 놓을 위치 세곳을 정해야 한다.
  • 전체 경우의 수는 64C3  으로 대략 41,664 로 현실적인 경우의 수 인 것을 알 수 있다.
    => 현실적인 경우의 수 라면, 완전 탐색이 가장 안전한 풀이가 가능하다.

중복문제

  • 벽을 놓을 위치를 정하는 것은 재귀 함수로 구현 할 수 있다.
  • 문제는 벽을 놓을 때, 중복으로 놓은 경우를 막아야 한다는 것이다.
  • 보통 중복으로 세는 경우를 방지하기 위해서는 항상 특정 형태로 답을 세는 것이다.
    => 사전 순으로 가장 먼저오는 답 하나만을 세거나
    => 2차원 배열에서 가장 윗 줄, 그 중에서도 가장 왼쪽부터 세는 것이다.
  • 여기서 구현 시 실수한 부분은 아래와 같다.
    => y, x 위치에서 벽을 설치, 다음 벽 설치는 반드시 y=y`, x=x` 에서 시작하도록 한다.
    => 여기서 x`=1 이면, y 가 y=y`+1 에서 시작하더라도,
          x=1 로 고정 되기 때문에, y=y`+1, x=0 인 경우를 확인 할 수 없다.
  • 단, y=y` 은 필요하다. 
    => 첫번째 벽을 y=1 에 설치한 경우, 두번째 벽은 y=0 에 설치 할 필요는 없기 때문이다.
    => 이 경우는 첫번째 벽을 y=0 에 설치한 경우와 같기 때문이다.

중복 문제 해결 2

  • row 와 column 을 재귀 호출 시 전달
  • 이 값을 그대로 사용
  • 하지만, 다음 row 로 이동할 때, column 을 0 으로 초기화.

[3. 코드]

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

우선 순위 큐. [1715]  (0) 2022.12.22
KMP. [1786]  (0) 2022.12.20
이진트리. [9934]  (0) 2022.12.15
트리. [1086]  (0) 2022.12.14
큐. [2161]  (0) 2022.12.13