-
[BOJ] #17144 _ 미세먼지 안녕!Problem Solving/BOJ 2019. 10. 22. 20:22
[미세먼지 안녕!] https://www.acmicpc.net/problem/17144
1초동안 일어나는 일을 그대로 구현하면되는 시뮬레이션 문제이다.
[ 소스 코드 ]
#include <cstdio> #include <algorithm> #include <cstring> #define MAX 51 using namespace std; int dx[] = { -1,1,0,0 }, dy[] = { 0,0,-1,1 }; int R, C, T; int map[MAX][MAX], air_fresh[2]; void spreadDust(); void operAirFresh(); int getRestDust(); int main() { int tmp = 0; scanf("%d %d %d", &R, &C, &T); for (int i = 1; i <= R; i++) { for (int j = 1; j <= C; j++) { scanf("%d", &map[i][j]); if (map[i][j] == -1) { air_fresh[tmp++] = i; map[i][j] = 0; } } } while (T--) { spreadDust(); operAirFresh(); } printf("%d\n", getRestDust()); return 0; } void spreadDust() { int tmp[MAX][MAX] = { 0, }; for (int i = 1; i <= R; i++) { for (int j = 1; j <= C; j++) { if (map[i][j] == 0) continue; int cnt = 0; for (int k = 0; k < 4; k++) { int tmp_y = i + dy[k], tmp_x = j + dx[k]; if (tmp_x<1 || tmp_y<1 || tmp_x>C || tmp_y>R) continue; if (tmp_x == 1 && tmp_y == air_fresh[0]) continue; if (tmp_x == 1 && tmp_y == air_fresh[1]) continue; tmp[tmp_y][tmp_x] += (map[i][j] / 5); cnt++; } tmp[i][j] += map[i][j] - (map[i][j] / 5)*cnt; } } memcpy(map, tmp, sizeof(map)); } void operAirFresh() { for (int i = air_fresh[0] - 1; i > 1; i--) map[i][1] = map[i - 1][1]; for (int i = 1; i < C; i++) map[1][i] = map[1][i + 1]; for (int i = 1; i < air_fresh[0]; i++) map[i][C] = map[i + 1][C]; for (int i = C; i > 1; i--) map[air_fresh[0]][i] = map[air_fresh[0]][i - 1]; for (int i = air_fresh[1] + 1; i <= R; i++) map[i][1] = map[i + 1][1]; for (int i = 1; i < C; i++) map[R][i] = map[R][i + 1]; for (int i = R; i > air_fresh[1]; i--) map[i][C] = map[i - 1][C]; for (int i = C; i > 1; i--) map[air_fresh[1]][i] = map[air_fresh[1]][i - 1]; } int getRestDust() { int result = 0; for (int i = 1; i <= R; i++) { for (int j = 1; j <= C; j++) { if (map[i][j] <= 0) continue; result += map[i][j]; } } return result; }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #17471 _ 게리맨더링 (0) 2019.10.22 [BOJ] #17281 _ 야구 (0) 2019.10.22 [BOJ] #17142 _ 연구소3 (0) 2019.10.22 [BOJ] #16637 _ 괄호 추가하기 (0) 2019.10.22 [BOJ] #16235 _ 나무 재태크 (0) 2019.10.22 댓글