-문제: https://www.acmicpc.net/problem/14502

 

14502번: 연구소

인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크

www.acmicpc.net

 

어려웠던 문제.

아이디어는 생각났는데, 그걸 코드로 옮기는 걸 몰랐다.

아이디어는

1.  조건에 맞추어 벽을 세개 세우기

2. 2주변 다 2로 바꾸기

3. 0의 갯수 출력

 

2,3은 bfs이용하면 될 것 같은데 1번을 어떻게 해야할지 잘 몰랐다.

select_wall을 참고하면 된다

 

 

-정답풀이: 

 

기본 정보 받는 코드. 여기까지는 오케이 

 

 

copy.deepcopy()는 깊은 복사로, 내부의 객체들까지 모두 새롭게 copy되는 것이다. 

nm에 변화가 생겨도 sel_nm은 복사한 상태 그대로 유지된다 

벽을 3개 모두 세웠을 때와 그 전인 경우로 나뉜다.

먼저 벽을 3개 모두 세웠을 때를 보면

깊은 복사한 것을 기준으로 바이러스를 전파시키고, 전파가 끝나면 

전체 0의 갯수를 센다 

 

벽이 3개 미만으로 세워졌을 때는 else문을 참고하면 되는데 

이 다음이 이해가 가지 않는다 

 

 

여기도 오케이. bfs

+ Recent posts