[BOJ] 16928๋ฒ | ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (C++)
2023. 12. 1. 18:11ใCoding Test/BOJ
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
BFS๋ก ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ธ๋ฐ, ์ ๋ ์ฌ๋ค๋ฆฌ๋ ๋ฑ์ ํ๊ณ ๊ฐ ๋ณด๋์นธ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํด์ฃผ์ง ์์, ์๋ฑํ ๋ต์ด ๋์์ต๋๋ค. ์ด๊ฑธ ๋นจ๋ฆฌ ์์์ฑ์ง ๋ชปํด์ ์๊ฐ์ ์ข ํ๋นํ๋ค์. ์๋ฌดํผ, ์ ๊ฐ ํผ ํ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ vector<int> teleports(100 + 1)์ ์ค๋นํ๋ค.
- teleports[i] = 0 ๐๐ป ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ๊ฐ ์์์ ์๋ฏธ
- teleports[i] != 0 ๐๐ป ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ๊ฐ ๋ค์ ์ธ๋ฑ์ค
- ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ vector<int> diceCounts(100 + 1)์ ์ค๋นํ๋ค.
- 1๋ฒ ์์น๋ถํฐ BFS ํ์์ ์์ํ๋ค.
- ํ์ฌ ์์น(current)๋ก๋ถํฐ 1 ~ 6์ ๋ํ ๋ค์ ์์น ๊ฐ(next)์ ์ป๋๋ค.
- ๋ณด๋๊ฒ์ ์นธ ๋ฒ์๋ฅผ ๋์ด๊ฐ๊ฑฐ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธ(diceCounts[next] != 0)ํ ๊ฒฝ์ฐ, continue
- next == 100์ด๋ผ๋ฉด, diceCounts[current] + 1์ ๋ฆฌํด
- ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ(teleports[next] != 0), next๋ฅผ ๊ฐฑ์
- ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ๊ฐ ๊ณณ์ด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ(diceCounts[next] != 0)์ธ ๊ฒฝ์ฐ, continue
- diceCounts[next] = diceCounts[current] + 1์ ํ๊ณ , ํ์ next ์ฝ์
- ํ์ฌ ์์น(current)๋ก๋ถํฐ 1 ~ 6์ ๋ํ ๋ค์ ์์น ๊ฐ(next)์ ์ป๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
const int BOARD_SIZE = 100;
int BFS(vector<int>& teleports, vector<int>& diceCounts) {
queue<int> indexes;
indexes.push(1);
while (!indexes.empty()) {
int current = indexes.front();
indexes.pop();
for (int i = 1; i <= 6; i++) {
int next = current + i;
if (next > BOARD_SIZE or diceCounts[next] != 0)
continue;
if (next == BOARD_SIZE)
return diceCounts[current] + 1;
while (teleports[next] != 0)
next = teleports[next];
if (diceCounts[next] != 0)
continue;
diceCounts[next] = diceCounts[current] + 1;
indexes.emplace(next);
}
}
return 0;
}
void AddTeleportInformations(vector<int>& next, int N) {
int from, to;
for (int i = 0; i < N; i++) {
cin >> from >> to;
next[from] = to;
}
}
int main() {
FAST_IO
// 1. ์ด๊ธฐํ
vector<int> teleports(BOARD_SIZE + 1, 0);
vector<int> diceCounts(BOARD_SIZE + 1, 0);
// 2. ์ฌ๋ค๋ฆฌ๋ ๋ฑ ์์ ์ถ๊ฐ
int ladderCount, snakeCount;
cin >> ladderCount >> snakeCount;
AddTeleportInformations(teleports, ladderCount);
AddTeleportInformations(teleports, snakeCount);
// 3. BFS ํ์ ์์
int answer = BFS(teleports, diceCounts);
cout << answer;
return 0;
}
728x90
๋ฐ์ํ
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 17472๋ฒ | ๋ค๋ฆฌ ๋ง๋ค๊ธฐ 2 (C++) (0) | 2023.12.12 |
---|---|
[BOJ] 13549๋ฒ | ์จ๋ฐ๊ผญ์ง 3 (C++) (1) | 2023.12.06 |
[BOJ] 9935๋ฒ | ๋ฌธ์์ด ํญ๋ฐ (C++) (1) | 2023.10.08 |
[BOJ] 2110๋ฒ | ๊ณต์ ๊ธฐ ์ค์น (C++) (0) | 2023.10.08 |
[BOJ] 2512๋ฒ | ์์ฐ (C++) (0) | 2023.09.06 |