๋ฌธ์ ๋งํฌ
๊ตฌ๋ฆLEVEL
๋์ด๋๋ณ ๋ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ SW ์ญ๋์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
level.goorm.io
๋ฌธ์ ์ค๋ช
์ ๋ ฅ
์ถ๋ ฅ
๋ฌธ์ ์ดํด
์ด์ ์ ํ์๋ ๋ฐ์ ๊ธฐ๋ ํ์ด ๋ฐฉ์์ด ๊ต์ฅํ ์ ์ฌํ๋ค.
1. ์ํ์ข์ฐ๋ก ๊ฐ์ ์ํ๋ฒณ์ด ์์ผ๋ฉด ์ด๋ํ์ฌ ๋ค์ ์ํ์ข์ฐ๋ฅผ ๋น๊ตํ๋ค.
2. 1์ ๋ ์ด์ ์ํ์ข์ฐ์ ๊ฐ์ ์ํ๋ฒณ์ด ์ ๋์ฌ ๋๊น์ง ๋ฐ๋ณตํ๋ค.(DFS๋ฅผ ์ฌ์ฉ)
3. ์ด ๋ฐ๋ณต ํ์ + 1(์ฒ์ ์๋ฆฌ)๊ฐ ์ฐ๊ฒฐ ์์์ ๊ฐ์์ด๋ค.
4. ์ฐ๊ฒฐ ์์๋ฅผ ์ ์ฅํ vector์ size๋ฅผ ํ์ธํ์ฌ k๊ฐ ์ด์์ด๋ฉด ํด๋นํ๋ ์นธ์ ์ํ๋ฒณ์ ์ ์ผ๋ก ๋ณ๊ฒฝํด ์ค๋ค.
5. 1~4๊น์ง์ ํ์๊ฐ ๋ฌธ์ ์ค๋ช ์ ์๋ ์์ ์ด๋ฉฐ ์ด๋ฅผ q๋ฒ ๋ฐ๋ณตํ๋ฉด ๋๋๋ค.
๋ฌธ์ ํด๊ฒฐ
1. DFSํจ์์ ์ฐ๊ฒฐ ์์๋ฅผ ์ ์ฅํ vector์ธ save๋ฅผ ๋ง๋ค์ด์ฃผ์ด ์ฐ์ฐํ๋ค.
vector<vector<int>> visit(50, vector<int>(50, 0));
stack<pair<int,int>> s;
vector<pair<int, int>> save;
s.push(make_pair(y,x));
save.push_back(make_pair(y,x));
visit[y][x] = 1;
while(!s.empty()){
int ty = s.top().first;
int tx = s.top().second;
s.pop();
for (int i = 0; i < 4; i++) {
int px = tx + dx[i];
int py = ty + dy[i];
if (px < 0 || px >= n || py < 0 || py >= n ) continue;
if((visit[py][px] == 0) && (graph[py][px] == c)) {
s.push(make_pair(py, px));
save.push_back(make_pair(py, px));
visit[py][px] = 1;
}
}
}
if (save.size() >= k) {
for (int i = 0; i < save.size(); i++) {
graph[save[i].first][save[i].second] = '.';
}
}
2. ์ฐ๊ฒฐ ์์ save์ ํฌ๊ธฐ๋ฅผ ํ์ธํ์ฌ k๊ฐ ์ด์์ด๋ฉด ์ ์ผ๋ก ๋ฐ๊ฟ์ค๋ค
if (save.size() >= k) {
for (int i = 0; i < save.size(); i++) {
graph[save[i].first][save[i].second] = '.';
}
}
3. 1~2๋ฅผ q๋ฒ ๋ฐ๋ณตํด ์ค๋ค.
for (int i = 0; i < q; i++) {
cin >> y >> x >> c;
y -= 1;
x -= 1;
graph[y][x] = c;
visit[y][x] = 1;
dfs(y, x, graph[y][x]);
for (int j = 0; j < n; j++) {
fill_n(visit[j], 50, 0);
}
}
๋ฌธ์ ํ๊ธฐ
์ฒ์ ์ฝ๋๋ฅผ ์งค ๋๋ ๋ชจ๋ ์์์ ๊ฐ์๋ฅผ ํ์ธํด ๋ณธ๋ค๊ณ ํ์ฌ x, y, c๋ฅผ ์ ๋ ฅ๋ฐ์ ๋๋ง๋ค ๋ชจ๋ graph ์์น๋ฅผ ํ์ธํด๋ณด๋ฉฐ ์ ์ผ๋ก ๋ง๋ค์ด ์คฌ์๋๋ฐ, ์๊ฐํด ๋ณด๋ ์ฒ์ graph์์ k๊ฐ ์ด์์ธ ์ฐ๊ฒฐ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ์ ๋ ฅ๋ฐ์ ์ํ๋ฒณ์ ๋ํด์๋ง ์ฐ์ฐํด ์ฃผ์์ผ๋ฉด ๋์๋ค.
์ด๋ ๊ฒ ๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง๊ฐ ๋์ด ๋ฌ๋ค. ๋ฌธ์ ๋ค์ด ํฌ๊ฒ ์ด๋ ต์ง๋ ์์ผ๋ฉด์, ๋๊ฒ ๊ทผ๋ณธ์ ์ธ ๊ธฐ๋ณธ๊ธฐ๋ค์ ๊ธฐ๋ฅผ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
ํ๋ฃจ์ฉ ๋ฆ๊ฒ ์ฌ๋ฆฌ๋ ๋ฐ๋์ ๋ธ๋ก ๋ณด์๋ ๋ช ๊ฐ ๋น ์ง๊ณ ์์ ์์ฒด๋ 3์ผ ์ฐจ๋ถํฐ ์์ํ ํฐ๋ผ, ๋ธ๋ก๋ค์ ๋ชจ๋ ๋ชป์ฑ์ด๊ฑด ์์ฝ๋ค.
์ฌ๋ฏธ์์๊ณ , ํนํ ๊ทธ๋ํ์์์ ๊ฐ ์ด๋ก ๋ค์ ํ์คํ๊ฒ ๋ฐฐ์ฐ๊ณ ์์ฉํด ๋ณผ ์ ์์๋ค.
์ ์ฒด ์ฝ๋
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
char graph[50][50];
int n, k, q;
int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
void dfs(int y, int x, char c){
vector<vector<int>> visit(50, vector<int>(50, 0));
stack<pair<int,int>> s;
vector<pair<int, int>> save;
s.push(make_pair(y,x));
save.push_back(make_pair(y,x));
visit[y][x] = 1;
while(!s.empty()){
int ty = s.top().first;
int tx = s.top().second;
s.pop();
for (int i = 0; i < 4; i++) {
int px = tx + dx[i];
int py = ty + dy[i];
if (px < 0 || px >= n || py < 0 || py >= n ) continue;
if((visit[py][px] == 0) && (graph[py][px] == c)) {
s.push(make_pair(py, px));
save.push_back(make_pair(py, px));
visit[py][px] = 1;
}
}
}
if (save.size() >= k) {
for (int i = 0; i < save.size(); i++) {
graph[save[i].first][save[i].second] = '.';
}
}
}
void pnt() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
{
cout << graph[i][j];
}
cout << endl;
}
}
int main(){
cin >> n >> k >> q;
for(int i = 0; i < n; i++){
for (int j = 0; j < n; j++)
{
cin >> graph[i][j];
}
}
int y, x;
char c;
for (int i = 0; i < q; i++) {
cin >> y >> x >> c;
y -= 1;
x -= 1;
graph[y][x] = c;
dfs(y, x, graph[y][x]);
}
pnt();
}
'Algorithm > ๊ตฌ๋ฆ ์ฑ๋ฆฐ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง] 4์ฃผ์ฐจ ํ์ต ์ผ๊ธฐ #1 (16์ผ์ฐจ) (0) | 2023.09.05 |
---|---|
[๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง] 3์ฃผ์ฐจ ํ์ต ์ผ๊ธฐ #2 (14์ผ์ฐจ) (0) | 2023.09.01 |
[๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง] 3์ฃผ์ฐจ ํ์ต ์ผ๊ธฐ #1 (11์ผ์ฐจ) (0) | 2023.08.28 |
[๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง] 2์ฃผ์ฐจ ํ์ต ์ผ๊ธฐ #2 (8์ผ์ฐจ) (0) | 2023.08.24 |
[๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง] 2์ฃผ์ฐจ ํ์ต ์ผ๊ธฐ #1 (6์ผ์ฐจ) (0) | 2023.08.22 |