HyeLog
๋ฐฑ์ค_16928_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ณธ๋ฌธ
๐โ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/16928
16928๋ฒ: ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์
์ฒซ์งธ ์ค์ ๊ฒ์ํ์ ์๋ ์ฌ๋ค๋ฆฌ์ ์ N(1 ≤ N ≤ 15)๊ณผ ๋ฑ์ ์ M(1 ≤ M ≤ 15)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ฌ๋ค๋ฆฌ์ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ x, y (x < y)๊ฐ ์ฃผ์ด์ง๋ค. x๋ฒ ์นธ์ ๋์ฐฉํ๋ฉด, y๋ฒ ์นธ์ผ
www.acmicpc.net
๐งฉ ์๊ณ ๋ฆฌ์ฆ
๋ฌธ์ ์ ๋ชฉ์ : ๋ชจ๋ ์ ์ ๋ฐฉ๋ฌธ, ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ → BFS ์๊ณ ๋ฆฌ์ฆ
Tip) ๊ทธ๋ํ๋ก ๋ฐ๊ฟ ์ ์๊ณ ๋ชจ๋ ๊ฐ์ค์น๊ฐ 1์ธ ๋ฌธ์ → BFS ์๊ณ ๋ฆฌ์ฆ
BFS ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ์ ํ์ ์ ์ ์ ๋ฃ์ ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด๋ค.
๐ก ์์ด๋์ด
arr ๋ฐฐ์ด์ 2์ฐจ๋ก ์ด๋ํ ์นธ์ ์ ์ฅํ๋ค. ์ฌ๊ธฐ์ '2์ฐจ'์ ์๋ฏธ๋ฅผ ์ค๋ช ํ์๋ฉด, 1์ฐจ ์ด๋์ด ์ฃผ์ฌ์์ ์ซ์๋งํผ ์ด๋ํ๋ ๊ฒ์ด๋ผ๋ฉด 2์ฐจ ์ด๋์ ์ฌ๋ค๋ฆฌ / ๋ฑ์ด ์์ ๊ฒฝ์ฐ ๋ ํ๋ฒ ์ด๋ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์, arr[x] = y ์ ์๋ฏธ๋ x์นธ์ ์์ ๋ 2์ฐจ๋ก ์ด๋ํ ์นธ์ด y๋ผ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์ฌ๋ค๋ฆฌ / ๋ฑ์ด ์๋ ์ผ๋ฐ์นธ์ด๋ผ๋ฉด, 2์ฐจ ์ด๋์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก(=๊ทธ๋ฅ ํด๋น ์นธ์ ๋จธ๋ฌผ๋ฌ ์๋ ๊ฒ์ด๋ฏ๋ก) ์ธ๋ฑ์ค ๊ฐ์ ์ ์ฅํ๋ค.
dist ๋ฐฐ์ด์๋ n๋ฒ์งธ ์นธ์ ๋์ฐฉํ๋ ์ต์ ์ฃผ์ฌ์ ๋์ง ํ์๋ฅผ ์ ์ฅํ๋ค. ๋ํ, ์ด ๋ฐฐ์ด์ BFS์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ์ ํ์ฉํ๋ค. (-1์ด๋ฉด ๋ฐฉ๋ฌธํ์ง ์์ ์นธ์ ์๋ฏธ)
๐ฉ๐ป ์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
int arr[101];
int dist[101];
void bfs() {
dist[1] = 0; // 1๋ฒ์งธ ์นธ์ ๋์ฐฉํ๋ ์ต์ ์ฃผ์ฌ์ ๋์ง ํ์๋ 0
queue<int> q;
q.push(1);
while (!q.empty()) {
int x = q.front(); q.pop();
for (int i = 1; i <= 6; i++) {
int y = x + i;
if (y > 100) continue;
y = arr[y];
if (dist[y] == -1) {
dist[y] = dist[x] + 1;
q.push(y);
}
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1; i <= 100; i++) {
arr[i] = i;
dist[i] = -1;
}
int a, b;
for (int i = 0; i < n; i++) { // ์ฌ๋ค๋ฆฌ
cin >> a >> b;
arr[a] = b;
}
for (int i = 0; i < m; i++) { // ๋ฑ
cin >> a >> b;
arr[a] = b;
}
bfs();
cout << dist[100] << '\n';
return 0;
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค_14502_์ฐ๊ตฌ์ (0) | 2022.06.16 |
---|---|
๋ฐฑ์ค_16948_๋ฐ์ค ๋์ดํธ (0) | 2022.06.16 |
๋ฐฑ์ค_16929_Two Dots (0) | 2022.06.02 |
๋ฐฑ์ค_1806_๋ถ๋ถํฉ (0) | 2022.05.26 |
๋ฐฑ์ค_2003_์๋ค์ ํฉ2 (0) | 2022.05.26 |