#include <iostream>
#include <vector>
using namespace std;
int r, c, t;
int graph[51][51];
int change[51][51];
int my;
int left()
{
int ans = 0;
for (int y = 0; y < r; y++)
{
for (int x = 0; x < c; x++)
{
// printf(" %2d", graph[y][x]);
if (graph[y][x] > 0)
{
ans += graph[y][x];
}
}
// printf("\n");
}
return ans;
}
void airclean()
{
int mx = 0;
// top
for (int y = my - 3; y >= 0; y--)
{
graph[y + 1][0] = graph[y][0];
}
for (int x = 1; x < c; x++)
{
graph[0][x - 1] = graph[0][x];
}
for (int y = 1; y < my; y++)
{
graph[y - 1][c - 1] = graph[y][c - 1];
}
for (int x = c - 2; x > 0; x--)
{
graph[my - 1][x + 1] = graph[my - 1][x];
}
graph[my - 1][1] = 0;
// bottom
for (int y = my + 2; y < r; y++)
{
graph[y - 1][mx] = graph[y][mx];
}
for (int x = 1; x < c; x++)
{
graph[r - 1][x - 1] = graph[r - 1][x];
}
for (int y = r - 2; y >= my; y--)
{
graph[y + 1][c - 1] = graph[y][c - 1];
}
for (int x = c - 2; x > 0; x--)
{
graph[my][x + 1] = graph[my][x];
}
graph[my][mx + 1] = 0;
}
int dy[4] = {-1, 1, 0, 0};
int dx[4] = {0, 0, -1, 1};
void extend()
{
int addnum;
int ny, nx;
for (int y = 0; y < r; y++)
{
for (int x = 0; x < c; x++)
{
if (graph[y][x] > 0)
{
addnum = graph[y][x] / 5;
int cnt = 0;
for (int j = 0; j < 4; j++)
{
ny = y + dy[j];
nx = x + dx[j];
if (ny >= r || ny < 0 || nx >= c || nx < 0)
continue;
if (graph[ny][nx] == -1)
continue;
change[ny][nx] += addnum;
cnt += 1;
}
change[y][x] -= (cnt * addnum);
}
}
}
for (int y = 0; y < r; y++)
{
for (int x = 0; x < c; x++)
{
graph[y][x] += change[y][x];
change[y][x] = 0;
}
}
}
void solution()
{
cin >> r >> c >> t;
for (int y = 0; y < r; y++)
{
for (int x = 0; x < c; x++)
{
cin >> graph[y][x];
if (graph[y][x] == -1)
my = y;
}
}
for (int i = 0; i < t; i++)
{
extend();
airclean();
}
cout << left();
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
solution();
return 0;
}
마주한 실수
1. 흐름 반대로 풀기
- 위에서 아래로 풀어야 하는데
- 반대로 풀었다가
- 문제가 생겼을 때
- 문제의 정확한 위치를 찾는데 오래걸렸음....
2. 기호화 부족
- 설계 그림을 대충 그려서
- 보다가 혼동와서 구현 과정에서 다르게 구현함
- 설계도는 본인이 정한 규칙에 맞게 제대로 기호화하자
3. 여러 초기화 시점이 있음을 인지 못함
- 매턴마다 미세먼지의 위치는 바뀌는데
- 그걸 생각 못하고
- 위치 저장을 맨처음 한 번만 해버림
=> 효율 찾으려다, 헛짓해버린 것
'코딩테스트' 카테고리의 다른 글
13460.cpp - 구슬 탈출 2 (1) | 2023.10.10 |
---|---|
C++로 코테를? (1) | 2023.10.10 |
댓글