์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
2 ์ด | 512 MB | 36.088% |
๋ฌธ์
์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋จน์ด ์ค ์ต๋จ ๊ฑฐ๋ฆฌ์ ์๋ ๋จน์ด๋ฅผ ์ฐจ๋ก๋๋ก ๋จน์ด์ผ ํ๋ค. ์ด ๋ ์ต๋จ ๊ฑฐ๋ฆฌ์ ๋จน์ด๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๊ฐ์ฅ ์์ชฝ์ ์๋ ๋จน์ด๋ฅผ ๋จน๊ณ , ์ต๋จ ๊ฑฐ๋ฆฌ์ด๋ฉด์ ์์ชฝ์ ์๋ ๋จน์ด๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋จน์ด๋ฅผ ํํ๋ค.
ํด๊ฒฐ ๋ฐฉ์
'๊ฐ์ฅ ์์ชฝ, ๊ฐ์ฅ ์ผ์ชฝ' ์ด๋ผ๋ ๋ง์ด ์ฌ์ค ์ดํดํ๊ธฐ ์ด๋ ค์ ๋๋ฐ ์ดํดํ๊ณ ๋๋ฉด ํ๋ฌดํ ์๊ธฐ์๋ค. ๋ง ๊ทธ๋๋ก ์์ชฝ๊ณผ ์ผ์ชฝ์ ๋ปํ ๋จ์ด๋ก, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์ฌ๋ฌ๊ฐ์ผ ๋ x์ขํ๊ฐ ์์ ์์๋ฅผ ์ฐ์ ์ผ๋ก, x์ขํ๊ฐ ๊ฐ๊ณ ์ต๋จ๊ฑฐ๋ฆฌ์ธ ๋จน์ด๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด y์ขํ๊ฐ ์์ ๋จน์ด๋ฅผ ์ฐ์ ์ผ๋ก ๋จน๋๋ค๋ ๋ป์ด๋ค.
์์ด์ ์์น๋ฅผ pair ์์ผ๋ก ์ ์ฅํด ๋์ด ๋งค ๋ฒ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ์ ์๋ ๋จน์ด๋ฅผ ์ฐพ์ผ๋ฌ bfs๋ฅผ ๋๋ฆฌ๊ฒ ๋๋ค. bfs ๋ฅผ ๋๋ฆฌ๋ฉด์ chk๋ผ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ด ๋ฐฐ์ด์ ๋ฐฉ๋ฌธํ๋์ง ์ฒดํฌํจ๊ณผ ๋์์ ๋ฐฉ๋ฌธํ์ ๋น์์ ์๊ฐ์ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ๋จน์ด๋ค์ ํ์ํ๋ฉด์ ๋จน์์ ์๊ณ , ์ต๋จ๊ฑฐ๋ฆฌ๋ผ๋ฉด Min(์๊ธฐ ์์ด์ ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋จน์ด์ ์ต๋จ๊ฑฐ๋ฆฌ)๊ณผ Min_p(์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋จน์ด ์ขํ)๋ฅผ ๊ฐฑ์ ํ๋ค. ์์ด์ ํฌ๊ธฐ๋ณด๋ค ํฌ๊ฑฐ๋ ์ด๋ฏธ ํ์ํ ์์น๋ผ๋ฉด ๋์ด๊ฐ๊ณ , ์์ด์ ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋จน์ด๋ ์ง๋๊ฐ ์๋ง ์์ผ๋ฏ๋ก ๊ฐฑ์ ํ ํ์ ์์ด ๋ค์๋ฒ ํ์์ ์ํด ํ์ ๋ฃ๋๋ค.
bfs๋ฅผ ๋๋ด๊ณ ๋๋ฉด ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ์ต๋จ๊ฑฐ๋ฆฌ์ ๋จน์ด๋ฅผ ์ฐพ์๋ธ ๊ฒ์ด๋ฏ๋ก ์์ด์ ์์น์ ์ด๋ฅผ ๊ฐฑ์ ํ๋ค. ๋ง์ฝ bfs๊ฐ ๋๋ ๋ ๊น์ง ์ฐพ์๋ธ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์๋ค๋ฉด ์๋ง ์์ด์๊ฒ ๋์์ ์ฒญํด์ผํ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค.
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
1992 KB | 4 ms |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include<iostream>
#include<string.h>
#include<queue>
#define inf 1e9
#define F(x, y, u, p) for(int x = 0; x<u; x++)for(int y = 0; y<p; y++)
using namespace std;
typedef pair<int, int> p;
int n, arr[25][25], chk[25][25], shark_size = 2, Min, cnt, ans;
int dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 };
p shark, Min_p;
void bfs(int x, int y) {
queue<p> q;
q.push({ x, y });
chk[x][y] = 0;
while (!q.empty()) {
int r = q.front().first, c = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int nr = r + dx[i], nc = c + dy[i];
if (nr < 0 || nr >= n || nc < 0 || nc >= n) continue;
if (arr[nr][nc] > shark_size || chk[nr][nc] >= 0) continue;
chk[nr][nc] = chk[r][c] + 1;
if (arr[nr][nc] && arr[nr][nc] < shark_size) {
if (Min > chk[nr][nc]) {
Min = chk[nr][nc];
Min_p.first = nr; Min_p.second = nc;
}
else if (Min == chk[nr][nc]) {
if (Min_p.first > nr || (Min_p.first == nr && Min_p.second > nc)) {
Min_p.first = nr; Min_p.second = nc;
}
}
}
q.push({ nr, nc });
}
}
}
int main() {
scanf("%d", &n);
F(i, j, n, n) {
scanf("%d", &arr[i][j]);
if (arr[i][j] == 9) {
shark = { i,j }; arr[i][j] = 0;
}
}
while (1) {
Min = Min_p.first = Min_p.second = inf;
memset(chk, -1, sizeof(chk));
bfs(shark.first, shark.second);
if (Min == inf) break;
ans += Min;
shark = { Min_p.first, Min_p.second };
arr[Min_p.first][Min_p.second] = 0;
cnt++;
if (cnt == shark_size) {
shark_size++;
cnt = 0;
}
}
printf("%d", ans);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #3187 ์์น๊ธฐ ๊ฟ (0) | 2019.10.13 |
---|---|
[BOJ] #7562 ๋์ดํธ์ ์ด๋ (0) | 2019.10.13 |
[BOJ] #17144 ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2019.10.10 |
[BOJ] #14500 ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2019.10.10 |
[BOJ] #13458 ์ํ๊ฐ๋ (0) | 2019.10.09 |
๋๊ธ