https://www.acmicpc.net/problem/16236
๋ฌธ์
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํฌ๊ธฐ๋ ์์ฐ์์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ 2์ด๊ณ , ์๊ธฐ ์์ด๋ 1์ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํ ์นธ์ฉ ์ด๋ํ๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ , ๋๋จธ์ง ์นธ์ ๋ชจ๋ ์ง๋๊ฐ ์ ์๋ค. ์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๋ง ๋จน์ ์ ์๋ค. ๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์์ง๋ง, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๋ค.
์๊ธฐ ์์ด๊ฐ ์ด๋๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
- ๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณต๊ฐ์ ์๋ค๋ฉด ์๊ธฐ ์์ด๋ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ผ๋ฉด, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๊ฑฐ๋ฆฌ๋ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋, ์ง๋์ผํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ด๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ค๋ฉด, ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋ฌํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ๋ง๋ฆฌ๋ผ๋ฉด, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค.
์๊ธฐ ์์ด์ ์ด๋์ 1์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ์ด๋๊ณผ ๋์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด, ๊ทธ ์นธ์ ๋น ์นธ์ด ๋๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋ ๋ง๋ค ํฌ๊ธฐ๊ฐ 1 ์ฆ๊ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 2์ธ ์๊ธฐ ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ 2๋ง๋ฆฌ ๋จน์ผ๋ฉด ํฌ๊ธฐ๊ฐ 3์ด ๋๋ค.
๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ธฐ ์์ด๊ฐ ๋ช ์ด ๋์ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๊ฐ์ ํฌ๊ธฐ N(2 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ฐ์ ์ํ๋ 0, 1, 2, 3, 4, 5, 6, 9๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- 0: ๋น ์นธ
- 1, 2, 3, 4, 5, 6: ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ
- 9: ์๊ธฐ ์์ด์ ์์น
์๊ธฐ ์์ด๋ ๊ณต๊ฐ์ ํ ๋ง๋ฆฌ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ธฐ ์์ด๊ฐ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ๋ชฉ์ ๊ท์ฝ์ง๋ง ๋์ด๋๋ ๊ณจ๋ 3..
์ฌ์ค ํ๋งํ๋๋ฐ ํ๊ฐ์ง ํฌ์ธํธ๋ฅผ ๋์ณ์ ์์ ํ ์คํธ์ผ์ด์ค 4๋ฒ์ ๊ณ์ ํ๋ ธ๋ค.
์ฐ์ ์์๊ฐ ์ > ์ผ์ชฝ์ธ๋ฐ ์ด๊ฑธ ๊ทธ๋ฅ ํ์๊ณผ์ ์์์ ๋ฐ๋ก ์ฒ๋ฆฌํ ์๊ฐ ์๋ค!
๊ทธ๋์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ์๋๊ณ ๋ค์ ์ด์ค๋ฐ๋ณต๋ฌธ ๋๋ ค์ ํ > ์ด ์์ผ๋ก ์ฐ์ ์์๊ฐ ๋๋ ๊ฑธ ์ฐพ์์ ๋ฆฌํดํด์ค์ผ ํ๋ค.
๋ค๋ฅธ๊ฑฐ ๋ค ํด๋๊ณ ์ด๊ฑฐ๋๋ฌธ์ ์ฝ๋ ๋ค์ ๊ฐ์์์ ^^..
๋๋ฆ ์ ๋ฐํ ๋ฌธ์ ์๋ค!! ๐ค
๋์ ํ์ด
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n;
int map[21][21];
int level = 2;
int dx[4] = {-1, 0, 1, 0}; // ์, ์ผ์ชฝ ์ฐ์
int dy[4] = {0, -1, 0, 1};
pair<int, int> now;
int eat = 0;
int timer = 0;
bool canGo(int x, int y,int visited[21][21]){
if(x<0 || y<0 || x>=n || y>=n) return false;
if(map[x][y]>level) return false;
if(visited[x][y]) return false;
return true;
}
bool bfs(){
int step[21][21] = {0};
int visited[21][21] = {0};
int canEat[21][21] = {0};
int minDist = 401;
queue<pair<int, int>> q;
q.push(now); // ์์ด์ ํ์ฌ ์์น์์ ์์
visited[now.first][now.second] = 1;
while(!q.empty()){
pair<int, int> a = q.front();
q.pop();
for (int i = 0; i < 4; ++i){
int nx = a.first + dx[i];
int ny = a.second + dy[i];
if(canGo(nx, ny, visited)){
q.push({nx, ny});
step[nx][ny] = step[a.first][a.second] + 1;
visited[nx][ny] = 1;
if(map[nx][ny]<level && map[nx][ny]>0) { // ์์ ๋ฌผ๊ณ ๊ธฐ์ ๋์ฐฉ ์ ์์น์ด๋, ๋จน๊ธฐ
canEat[nx][ny] = 1;
if(minDist > step[nx][ny]) minDist = step[nx][ny];
}
}
}
}
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
if(step[i][j]==minDist && canEat[i][j]){
now = make_pair(i, j);
map[i][j] = 0;
eat++;
timer += step[i][j];
return true;
}
}
}
return false;
}
int main(){
cin >> n;
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
cin >> map[i][j];
if(map[i][j]==9){
now = make_pair(i, j);
map[i][j] = 0;
}
}
}
while(1){
bool c = false;
c = bfs();
if(level == eat){
eat = 0;
level++;
}
if (!c) break;
}
cout << timer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 7576 : ํ ๋งํ (bfs/dfs) (0) | 2023.04.14 |
---|---|
[C++/BOJ] 1107 : ๋ฆฌ๋ชจ์ปจ (์์ ํ์) (0) | 2023.04.14 |
[C++/BOJ] 2468 : ์์ ์์ญ (bfs/dfs) (0) | 2023.04.13 |
[C++/BOJ] 21610 : ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (์๋ฎฌ๋ ์ด์ ) (0) | 2023.04.05 |
[C++/BOJ] 21608 : ์์ด ์ด๋ฑํ๊ต (์๋ฎฌ๋ ์ด์ ) (0) | 2023.04.05 |