코드
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
int n, m, t, x, d, k, res;
vector<deque<int>> v;
vector<pair<int, int>> zv;
void FASTIO() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
int main() {
FASTIO();
cin >> n >> m >> t;
for (int i = 0; i < n; i++) {
deque<int> dq;
for (int j = 0; j < m; j++) {
int temp = 0;
cin >> temp;
dq.push_back(temp);
}
v.push_back(dq);
}
for (int i = 0; i < t; i++) {
cin >> x >> d >> k;
for (int j = 1; j <= n / x; j++) {
if (d == 0) { // 시계 방향 회전
for (int w = 0; w < k; w++) {
int last = v[x * j - 1].back();
v[x * j - 1].pop_back();
v[x * j - 1].push_front(last);
}
} else { // 반시계 방향 회전
for (int w = 0; w < k; w++) {
int first = v[x * j - 1].front();
v[x * j - 1].pop_front();
v[x * j - 1].push_back(first);
}
}
}
int cnt = 0, cnt2 = 0;
// 가로 방향 중복 확인 및 계산
for (int j = 0; j < n; j++) {
for (int w = 0; w < m; w++) {
if (v[j][w] != 0) {
cnt += v[j][w];
cnt2++;
}
}
for (int w = 0; w < m; w++) {
if (v[j][w] == v[j][(w + 1) % m] && v[j][w] != 0) {
zv.push_back({j, w});
zv.push_back({j, (w + 1) % m});
}
}
}
// 세로 방향 중복 확인
for (int w = 0; w < m; w++) {
for (int j = 1; j < n; j++) {
if (v[j - 1][w] == v[j][w] && v[j][w] != 0) {
zv.push_back({j, w});
zv.push_back({j - 1, w});
}
}
}
double temp2 = 0;
if (cnt2) temp2 = (double)cnt / cnt2;
if (zv.empty()) {
for (int j = 0; j < n; j++) {
for (int w = 0; w < m; w++) {
if (v[j][w] != 0) {
if (v[j][w] > temp2) v[j][w]--;
else if (v[j][w] < temp2) v[j][w]++;
}
}
}
} else {
for (int j = 0; j < zv.size(); j++) {
v[zv[j].first][zv[j].second] = 0;
}
}
zv.clear(); // 다음 번을 위해 clear
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
res += v[i][j];
}
}
cout << res << '\n';
return 0;
}
크기가 작아서 문제에서 시킨대로 따라가면 될 것 같았다. 덱을 이용해서 시계 방향, 반시계 방향 회전을 시켜준다. 그 후 가로 방향과 세로 방향을 확인하고 문제에서 준 조건대로 값을 수정해주면 해결할 수 있는 문제. for문에서 연산자를 착각해서 오래 헤맸다. 더 집중해서 실수 없이 푸는 연습을 해야할 것 같다.
'백준' 카테고리의 다른 글
[백준] 17406번 배열 돌리기 4 C++ 코드 (1) | 2024.06.14 |
---|---|
[백준] 14888번 연산자 끼워넣기 C++ 코드 (1) | 2024.06.14 |
[백준] 1202번 보석 도둑 C++ 코드 (0) | 2024.05.29 |
[백준] 1062번 가르침 C++ 코드 (0) | 2024.05.21 |
[백준] 13244번 Tree C++ 코드 (0) | 2024.05.17 |