문제
링크
풀이
#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
void solve(void) {
int r, s; cin >> r >> s;
vector<vector<char>> v(r, vector<char>(s));
for (int i=0; i<r; i++) for (int j=0; j<s; j++) cin >> v[i][j];
vector<int> m(s, -1), g(s, -1);
vector<pair<int, int>> p;
for (int i=0; i<r; i++) for (int j=0; j<s; j++) {
if (v[i][j] == 'X') m[j] = i, p.push_back({i, j});
}
for (int i=r-1; i>=0; i--) for (int j=0; j<s; j++) {
if (v[i][j] == '#') g[j] = i;
}
int move = 1e9;
for (int i=0; i<s; i++) {
if (m[i] == -1) continue;
move = min(move, g[i] - m[i] - 1);
}
for (auto [i, j] : p) v[i][j] = '.';
for (auto [i, j] : p) v[i+move][j] = 'X';
for (int i=0; i<r; i++) {
for (int j=0; j<s; j++) cout << v[i][j];
cout << "\n";
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}