[문제]
https://www.acmicpc.net/problem/17144
[풀이]
1) 맵의 형태 보존이 중요한 문제이다.
2) 1열의 어느 2 행에는 공기청정기가 설치되어있고 다른 칸들은 모두 미세먼지가 있거나, 미세먼지가 있을 수 있는 공간이다.
3) 1초에 두 가지 프로세스가 진행된다. (총 T초간 진행)
-
미세먼지 확산 (상하좌우로 퍼진다. 단, 벽과 공기청정기가 있는 칸은 퍼지지 않는다.)
퍼지는 미세먼지의 양은 현재 미세먼지의 1/5
-
공기청정기 작동 (공기청정기가 위치한 행 중 위쪽은 반시계방향으로 흐르고, 아래쪽은 시계방향으로 흐른다. 공기청정기로 들어온 미세먼지는 제거된다.
4) 미세먼지 확산 (SpreadDust())
현재 칸에 있는 미세먼지의 양에서 5를 나눈 만큼 인접한 칸들에 확산된다.
현재 칸의 미세먼지 양을 계속 가지고 있어야 하기 때문에 c_map에 확산된 먼지 양을 저장한다.
현재 칸이 0보다 큰 값을 가지고 있다면 c_map에 미세먼지를 확산시키고, 0보다 작다면 공기청정기이기 때문에 c_map에 -1을 넣어준다.
map에 c_map을 복사한다.
5) 공기청정기를 작동시킬 때 또 다른 맵(c_map2)에 이동한 미세먼지들을 저장한다.
반시계방향
-
왼쪽-> 오른쪽
-
아래쪽 -> 위쪽
-
오른쪽-> 왼쪽
-
위쪽-> 아래쪽 (공기청정기로 들어가게 되는 것과 아닌 것을 구별해야 한다.)
시계방향
-
오른쪽->왼쪽
-
위쪽-> 아래쪽
-
왼쪽-> 오른쪽
-
아래-> 위쪽 (공기청정기로 들어가게 될 것과 아닌 것을 구별해야한다.)
7) map 에 남아있는 미세먼지의 수를 더하여 정답을 도출한다.
'BOJ > C++' 카테고리의 다른 글
[BOJ] 괄호추가하기 (0) | 2019.10.08 |
---|---|
[BOJ] 아기상어 (0) | 2019.09.26 |
[BOJ] 게리맨더링 (2) | 2019.09.22 |
[BOJ] 배열 돌리기1 (0) | 2019.09.21 |
[BOJ] 불 (0) | 2019.09.17 |