-
[백준] 17144 - 미세먼지 안녕!Algorithm 문제 2019. 7. 8. 17:00
https://www.acmicpc.net/problem/17144
알고리즘적으로는 간단한 구현 문제.
주의할 점이 있다면, 먼지 확산이 동시에 일어나기 때문에, 각 칸에 확산되는 먼지는 모든 칸에서 계산이 끝난 뒤에 적용되어야 한다.
공기 청정기 부분은 4 방향에 대해서 각각 반복문을 작성하였다. 각 방향의 시작, 끝 인덱스를 정확히 결정해야 한다.
<C++ 코드>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899#include <cstdio>int main(){int r, c, t;int room[51][51];int cl;int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};scanf("%d %d %d", &r, &c, &t);for(int i=0; i<r; i++){for(int j=0; j<c; j++){scanf("%d", &room[i][j]);if(room[i][j] == -1){cl = i;}}}cl--;for(int time=0; time<t; time++){// 확산// 이동되는 먼지 양 계산int exp[51][51] = {};for(int i=0; i<r; i++){for(int j=0; j<c; j++){if(room[i][j] != 0 && room[i][j] != -1){int cnt = 0;for(int k=0; k<4; k++){int ay = i + dy[k], ax = j + dx[k];if(ay >= 0 && ay < r && ax >= 0 && ax < c && room[ay][ax] != -1){cnt++;exp[ay][ax] += room[i][j] / 5;}}room[i][j] -= (room[i][j] / 5) * cnt;}}}// 먼지 이동 적용for(int i=0; i<r; i++){for(int j=0; j<c; j++){room[i][j] += exp[i][j];}}// 순환// 삭제되는 부분부터 제거해야 다른 항이 소실되지 않음// 윗방향 순환// 위에서 아래 방향으로for(int i=cl-1; i>=1; i--){room[i][0] = room[i-1][0];}// 우측에서 좌측으로for(int i=0; i<c-1; i++){room[0][i] = room[0][i+1];}// 아래에서 위for(int i=0; i<cl; i++){room[i][c-1] = room[i+1][c-1];}// 좌에서 우for(int i=c-1; i>=1; i--){room[cl][i] = room[cl][i-1];}// 정화 공기로 채워진 장소room[cl][1] = 0;// 아래방향 순환// 아래에서 위 방향으로for(int i=cl+2; i<r-1; i++){room[i][0] = room[i+1][0];}// 좌측에서 우측으로for(int i=0; i<c-1; i++){room[r-1][i] = room[r-1][i+1];}// 위에서 아래for(int i=r-1; i>cl+1; i--){room[i][c-1] = room[i-1][c-1];}// 좌에서 우for(int i=c-1; i>=1; i--){room[cl+1][i] = room[cl+1][i-1];}// 정화 공기로 채워진 장소room[cl+1][1] = 0;}int sum = 2; // 공기 청정기 2for(int i=0; i<r; i++){for(int j=0; j<c; j++){sum += room[i][j];}}printf("%d", sum);return 0;}cs 'Algorithm 문제' 카테고리의 다른 글
[백준] 13460 - 구슬 탈출 2 (0) 2019.07.13 [백준] 14888 - 연산자 끼워넣기 (0) 2019.07.12 [백준] 1064 - 평행사변형 (0) 2019.07.03 [백준] 15954 - 인형들 (1) 2019.07.02 [백준] 1562 - 계단 수 (0) 2019.06.30