[구현] 백준 17144 미세먼지 안녕!
2021. 3. 16. 12:01ㆍ알고리즘 문제분석
수행 시간: 3시간
골드 5수준의 삼성SW 기출이였던걸로 기억한다. 공기청정기의 위치좌표를 저장해주고 그 좌표를 통해 구현해주면 어렵지 않은 문제였다.
#include <iostream>
#include <queue>
using namespace std;
int r, c, t; //r은 세로 c는 가로 t는 경과시간
int room[7][51];
int tmp_room[7][51];
int dx[4] = { 0,0,-1,1 };
int dy[4] = { 1,-1,0,0 };
int up_air, down_air;
int total;
void expend() {
for (int i = 0;i < r;i++) {
for (int j = 0;j < c;j++) {
int now_dust = room[i][j];
int dust_size = (int)(room[i][j] / 5);
int dust_cnt = 0;
for (int k = 0;k < 4;k++) {
int nx = dx[k] + i;
int ny = dy[k] + j;
if (nx > r || nx <= 0 || ny > c || ny <= 0) { //벽
continue;
}
if (room[nx][ny] == -1) { //공기청정기
continue;
}
dust_cnt++;
tmp_room[nx][ny] += dust_size; //임시 룸에 더해줌
}
room[i][j] = now_dust - dust_size * dust_cnt; //원래 룸에 저장
}
}
for (int i = 0;i < r;i++) {
for (int j = 0;j < c;j++) {
room[i][j] += tmp_room[i][j];
tmp_room[i][j] = 0;
}
}
}
void air() {
total -= room[up_air - 1][0];
total -= room[down_air + 1][0];
for (int i = 2;i <= c - 1;i++) { //아래
room[up_air][i] = room[up_air][i - 1];
}
for (int i = up_air-1; i >=0 ;i--) { //오른쪽
room[i - 1][c - 1] = room[i][c - 1];
}
for (int i =c-2;i >=0;i--) { // 위
room[0][i] = room[0][i + 1];
}
for (int i = 1; i <up_air-1;i++) { // 왼쪽
room[i][0] = room[i - 1][0];
}
room[up_air][1] = 0;
for (int i = 2;i <=c-1;i++) { //위
room[down_air][i] = room[down_air][i - 1];
}
for (int i = down_air+1;i <=r-1;i++) { // 오른쪽
room[i][c - 1] = room[i - 1][c - 1];
}
for (int i = c-2;i >=0;i--) { //아래
room[r - 1][i] = room[r - 1][i + 1];
}
for (int i = r-2; i < down_air+1;i--) { //왼쪽
room[i][0] = room[i + 1][0];
}
room[down_air][1] = 0;
}
int main() {
int e = 0;
cin >> r >> c >> t;
for (int i = 0; i < r;i++) {
for (int j = 0;j < c;j++) {
cin >> room[i][j];
if (room[i][j] == -1 && e == 0) {
up_air = i;
e++;
}
else if (room[i][j] == -1 && e == 1) {
down_air = i;
}
else
total += room[i][j];
}
}
for (int i = 1;i <= t;i++) {
expend();
air();
}
cout << total;
}
'알고리즘 문제분석' 카테고리의 다른 글
[BFS&완전탐색] 백준 2468 안전 영역 (0) | 2021.03.19 |
---|---|
[BFS] 백준 1697 숨바꼭질 (0) | 2021.03.16 |
[BFS&구현] 백준 16236 아기상어 (0) | 2021.03.16 |
[DP&DFS] 백준 1890 점프 (0) | 2021.03.08 |
[완전탐색] 백준 1051 숫자 정사각형 (0) | 2021.03.06 |