๋ฌธ์ ๋งํฌ
2842๋ฒ: ์ง๋ฐฐ์ ํ์๋ (acmicpc.net)
ํฌํฌ์ธํฐ์ BFS๊ฐ ํฉ์ณ์ง ์ฌ๋ฐ๋ ๋ฌธ์ ์๋ค.
์ฐธ๊ณ ๋งํฌ
๋ฒกํฐ์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฒ์ ๊น๋จน์ด์ ๋ค๋ฅธ ๋ถ์ ๊ฒ์๋ฌผ์ ์ฐธ๊ณ ํ๋ฉด์ ์ฝ๋๋ฅผ ์งฐ๋ค.
ํ์ด
< ์ค๋น๋ฌผ >
1. ๋ค๋ฌ์ผ ํ ์ง์ด ์ด ๋ช ๊ตฐ๋ฐ์ธ์ง ์ผ๋ค.
2. ์ฐ์ฒด๊ตญ์ ์ขํ๋ฅผ ์ ์ฅํ๋ค.
3. ๋ชจ๋ ๊ณ ๋๋ฅผ ๋ค ์ ์ฅํ๊ณ ์ ๋ ฌํ ํ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
๋ฒกํฐ์ ์ ์ฅํ ํ unique() ํจ์๋ฅผ ์ด์ฉํด์ ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๋ค.
์ผ๋จ ์ ๋ ฅ์ ๋ฐ์ผ๋ฉด์ ์ด 3๊ฐ์ง๋ฅผ ์ค๋นํด์ผํ๋ค.
์ฌ๊ธฐ์ ๊ณ ๋๊ฐ ์ ์ฅ๋ ๋ฒกํฐ๋ฅผ H ๋ฒกํฐ๋ผ๊ณ ํ์.
3
P..
.KK
...
3 2 4
7 4 2
2 3 1โ
์ ์๋ ์์ 3์ ์๋ก ๋ค๋ฉด, H ๋ฒกํฐ์๋ ์ค๋ณต์ ์ ๊ฑฐ ํ { 1 2 3 4 7 } ์ด ๋ค์ด์์ ๊ฒ์ด๋ค. ์ด ๋ฒกํฐ๋ฅผ ์ด์ฉํด์ ์ง๋ฐฐ์์ด ์ด์ฉํ ์นธ์ ๊ณ ๋์ ๋ฒ์๋ฅผ ์ค์ ํ๋ค. ๋ฒ์๋ฅผ ์ค์ ํ ํ BFS ๋ฅผ ์ด์ฉํด์ ์ง๋ฐฐ์์ด ๋ชจ๋ ์ฐํธ์ ๋ฐฐ๋ฌ ํ ์ ์๋ ์ง๋ฅผ ํ๋ณํ๋ค.
ํ๋ณ : BFS๋ฅผ ๋๋ฉด์ ๋ฐฉ๋ฌธํ ์ง์ ์๊ฐ ์ด ์ง์ ์์ ๊ฐ์์ง๋ฉด ๋ชจ๋ ์ฐํธ ๋ฐฐ๋ฌ์ ์ฑ๊ณตํ ๊ฒ์ด๋ค.
๊ฐ ์ ์๋ ๊ณ ๋์ ๋ฒ์๋ฅผ H[left] ~ H[right] ๊น์ง๋ผ๊ณ ํ๋ฉด, ์ด๊ธฐ๊ฐ์ left = 0, right = 0 ์ผ๋ก ์ค์ ํด์ค๋ค.
1. ์ค์ ํ ๋ฒ์ ๋ด์์ ์ง๋ฐฐ์์ด ๋ชจ๋ ์ฐํธ์ ๋ฐฐ๋ฌ ํ ์ ์์ผ๋ฉด left๋ฅผ ๋๋ ค์ ๋ฒ์๋ฅผ ์ขํ์ค๋ค.
2. ์ค์ ํ ๋ฒ์ ๋ด์์ ์ง๋ฐฐ์์ด ๋ชจ๋ ์ฐํธ์ ๋ฐฐ๋ฌํ์ง ๋ชปํ๋ค๋ฉด right๋ฅผ ๋๋ ค์ ๋ฒ์๋ฅผ ๋๋ ค์ค๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ๋ชจ๋ ์ฐํธ์ ๋ฐฐ๋ฌ ํ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฒ์๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค. ๊ณ ๋์ ๋ฒ์๊ฐ ๊ฐ์ฅ ์ข๋ค๋ ๊ฒ์ ๊ฐ์ฅ ๋์ ๊ณ ๋์ ๊ฐ์ฅ ๋ฎ์ ๊ณ ๋์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์ ๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ด๋ค.
โป ์ฃผ์ํ ์
BFS๋ฅผ ํ์ํ๊ธฐ ์ ์ ์ฐ์ฒด๊ตญ์ ๊ณ ๋๊ฐ ์ค์ ํ ๋ฒ์ ๋ด์ ๋ค์ด์์ ๋ BFS ํ์์ ์์ํ๋ค.
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef priority_queue<pair<pair<int, int>, int>, vector<pair<pair<int, int>, int>>, greater<pair<pair<int, int>, int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 50 + 5;
int dx[] = { 0,1,0,-1, 1,-1,1,-1 };
int dy[] = { 1,0,-1,0, -1,1,1,-1 };
char Map[MAX_N][MAX_N];
int height[MAX_N][MAX_N];
bool visited[MAX_N][MAX_N];
vector<int> H;
int N, K;
bool is_ok(pair<int, int>);
bool BFS(pair<int, int> st, pair<int,int> Range);
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
pair<int, int> Post;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> Map[i][j];
if (Map[i][j] == 'P')
Post = { i,j };
else if (Map[i][j] == 'K')
K++;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> height[i][j];
H.push_back(height[i][j]);
}
}
sort(H.begin(), H.end());
H.erase(unique(H.begin(), H.end()), H.end());
int left = 0;
int right = 0;
int ans = INF;
while (right < H.size()) {
while (true) {
if (height[Post.first][Post.second] > H[right]
|| height[Post.first][Post.second] < H[left])
break;
memset(visited, false, sizeof(visited));
if (BFS(Post, { H[left],H[right] })) {
ans = min(ans, H[right] - H[left]);
}
else break;
left++;
}
right++;
}
cout << ans << "\n";
return 0;
}
bool BFS(pair<int, int> st, pair<int,int> Range) {
queue<pair<int, int>> q;
q.push({ st.first,st.second });
visited[st.first][st.second] = true;
int cnt = 0;
while (!q.empty()) {
pair<int, int> now = q.front();
q.pop();
if (Map[now.first][now.second] == 'K') {
cnt++;
if (cnt == K) return true;
}
for (int i = 0; i < 8; i++) {
pair<int, int> next = { now.first + dy[i], now.second + dx[i] };
if (is_ok(next)) {
if (height[next.first][next.second] >= Range.first && height[next.first][next.second] <= Range.second) {
q.push(next);
visited[next.first][next.second] = true;
}
}
}
}
return false;
}
bool is_ok(pair<int, int> now) {
if (now.first < 0 || now.first >= N || now.second < 0 || now.second >= N || visited[now.first][now.second])
return false;
return true;
}
|
cs |
'๋ฐฑ์ค > Platinum' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 13308 : ์ฃผ์ ์ (0) | 2022.03.15 |
---|---|
[BOJ] 10272 : ํ์๊ธ ์ฌ๋ฅ๊พผ ๊น์ ์ (0) | 2022.03.11 |
[BOJ] 3197 : ๋ฐฑ์กฐ์ ํธ์ (0) | 2022.03.08 |
[BOJ] 1328 : ๊ณ ์ธต ๋น๋ฉ (0) | 2022.03.07 |
[BOJ] 5719 : ๊ฑฐ์ ์ต๋จ ๊ฒฝ๋ก (0) | 2022.01.27 |