반응형
https://www.acmicpc.net/problem/17144
17144번: 미세먼지 안녕!
미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int r, c, t, arr[51][51], cleaner;
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
struct Dust {
int x, y, q;
};
int ans() {
int cnt = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j] > 0) {
cnt += arr[i][j];
}
}
}
return cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> r >> c >> t;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
cin >> arr[i][j];
if (arr[i][j] == -1) {
cleaner = i;
}
}
}
int clean_up = cleaner - 1;
int clean_down = cleaner;
//1.미세먼지 확산
//2. 공기 청정기 이동
for (int T = 1; T <= t; T++) {
vector<Dust> d;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j] >= 5) {
d.push_back({ i,j,arr[i][j] });
}
}
}
//확산
for (int i = 0; i < d.size(); i++) {
int spread = 0;
if (d[i].q >= 5) {
for (int k = 0; k < 4; k++) {
int nx = d[i].x + dx[k];
int ny = d[i].y + dy[k];
if (nx < 0 || nx >= r || ny < 0 || ny >= c) continue;
if (arr[nx][ny] == -1)continue;
arr[nx][ny] += (d[i].q / 5);
spread++;
}
arr[d[i].x][d[i].y] -= (d[i].q / 5) * spread;
}
}
// 공기청정기 작동
for (int i = clean_up - 1; i >= 0; i--) {
arr[i + 1][0] = arr[i][0];
}
for (int i = clean_down; i < r; i++) {
arr[i][0] = arr[i + 1][0];
}
for (int i = 0; i < c-1; i++) {
arr[0][i] = arr[0][i + 1];
arr[r - 1][i] = arr[r - 1][i + 1];
}
for (int i = 0; i < clean_up ; i++) {
arr[i][c - 1] = arr[i + 1][c - 1];
}
for (int i = r-1; i > clean_down; i--) {
arr[i][c - 1] = arr[i - 1][c - 1];
}
for (int i = c - 1; i > 1; i--) {
arr[clean_up][i] = arr[clean_up][i - 1];
arr[clean_down][i] = arr[clean_down][i - 1];
}
arr[clean_up][1] = 0;
arr[clean_down][1] = 0;
arr[clean_up][0] = -1;
arr[clean_down][0] = -1;
}
int ans = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j] > 0) ans += arr[i][j];
}
}
cout << ans << '\n';
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 11559번 : Puyo Puyo C++ 문제풀이코드 (0) | 2022.02.10 |
---|---|
백준 16918번 : 봄버맨 C++ 코드 (0) | 2022.02.09 |
백준 17143번 : 낚시왕 (0) | 2022.02.09 |
백준 14890번 : 경사로 C++ (0) | 2022.02.09 |
백준 11724번 : 연결 요소의 개수 Union&Find , BFS C++ (0) | 2022.02.09 |