jsstar522   3년 전

게시판에 있는 모든 반례, 예제, 구글링으로 찾을 수 있는 반례를 다 넣어봐도 어디가 잘못되었는지 모르겠습니다.

활성 바이러스가 퍼지면서 비활성 바이러스를 자연스럽게 통과하는 것도 구현했구요.

문제는 잘 이해한것같은데 제가 놓치는게 있을까요..?


정답은 dfs로 지정한 바이러스 위치로부터 counter[][] 배열에 1초씩 더해가며 퍼져가도록 구현했으며, 여기에서 최대값을 구하는 방식입니다.

예를들어 (0,0)에 바이러스가 4x4 배열에서 바이러스가 퍼져나간다면 다음과 같이 counter 배열이 만들어집니다.

0 1 2 3

1 2 3 4

2 3 4 5

3 4 5 6


이렇게 되면 최대값은 6이므로 6초가 정답이 됩니다. 중간에 벽이나 비활성기체가 있는 예시도 들어드리겠습니다.

4 1

2 0 0 0

0 0 0 0

1 2 1 1

0 0 0 0

이런식으로 input을 넣으면 counter 배열은

0 1 2 3
1 2 3 4
0 -1 0 0
5 4 5 6

-1 2 3 4
2 1 2 3
0 0 0 0
2 1 2 3

이렇게 두가지 경우의 수가 나오게 되며, 최소값인 4가 답이됩니다.

설명이 좀 길었네요 ㅠㅠ 도와주시면 감사하겠습니다.


댓글을 작성하려면 로그인해야 합니다.