[๋ฐฑ์ค(BOJ)] ํด์งํด์ง(1326) C++
๋ฌธ์ : BOJ_1326๋ฒ ํด์งํด์ง
๋ฌธ์ ์ค๋ช
bfs, pair
bfs๋ฅผ ์ด์ฉํ ์ต์ ์ ํ ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์
๋๋ค.
์ ์ฌํ ๋ฌธ์ ๋ก๋ bfs๋ฅผ ํ์ฉํ ๋ฐฑ์ค 1697๋ฒ ์จ๋ฐ๊ผญ์ง์ด ์์ต๋๋ค.
Solution
dfs์ bfs๋ฅผ ์ด์ฉํ๋ ๋ฌธ์ ๋ค ์ค ์ด๋ค ์ํฉ์์ ๋ ๊ฐ ์ค ํ๋๋ฅผ ์ ํํด์ผ ๋๋์ง ๊ณ ๋ฏผ์ด ๋ ๋๊ฐ ์๋๋ฐ,
๋ชฉ์ ์ง์ ๋๋ฌํ๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํ์ธํด์ผ ๋๊ธฐ๋ณด๋ค๋ ๋ชฉ์ ์ง์ ๋๋ฌํ๋ ์ต์ ๊ฑฐ๋ฆฌ, ์ต์ ์๊ฐ ๋ฑ์ ๋ฌธ์ ๋ฅผ ํ ๋๋ ๋ณดํต bfs๋ก ํ๋ฆฌ๋ ๋ฌธ์ ๋ค์ด ๋ง์ต๋๋ค.
Description
- ์ง๊ฒ๋ค๋ฆฌ์ ์ฐ์ฌ ์๋ ์ ๋ค์ ๊ฐ ์ง๊ฒ๋ค๋ฆฌ์ ๋ฒํธ์ ๋ง๋ ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.
- pair๋ฅผ ์ด์ฉํ์ฌ ๋๋ฌํ ์ง๊ฒ๋ค๋ฆฌ์ ๋ฒํธ๋ฅผ pair์ first์, ๋๋ฌํ๊ธฐ๊น์ง ์ ํํ ํ์๋ฅผ pair์ second์ push
#include <iostream>
#include <queue>
using namespace std;
queue<pair<int, int>>q;
int st, ed, jump[10001], roof, vis[10001], swc, res; /*swc == switch ์ํ๋ ์ง๊ฒ๋ค๋ฆฌ์
๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด, swc == 0 ์ด ๋๊ฒํ์ฌ -1์ ์ถ๋ ฅํ๊ธฐ ์ํ ๋ณ์์
๋๋ค. */
int main() {
cin >> roof;
for (int i = 1; i <= roof; i++) {
cin >> jump[i]; // ์ง๊ฒ๋ค๋ฆฌ์ ๋ฒํธ์ ์ฐ์ฌ์๋ ์๋ฅผ ๋ฃ์ด์ค๋๋ค.
}
cin >> st;
cin >> ed;
q.push(make_pair(st, 0)); // st==์์ ์ง๊ฒ๋ค๋ฆฌ, 0==์ ํํ ํ์
vis[st] = 1;
while (!q.empty()) {
if (q.front().first == ed) {
res = q.front().second;
swc++; // q.front().first๊ฐ ๋ชฉํํ ์ง๊ฒ๋ค๋ฆฌ์ ๋๋ฌํ์ ๋ swc==1์ด ๋ฉ๋๋ค.
break;
}
int now = q.front().first; // now==ํ์ฌ์์น
int cnt = q.front().second; // cnt==count ์ ํํ ํ์
q.pop();
for (int i = 1; now + (jump[now] * i) <= roof; i++) {
int next = now + jump[now] * i;
if (vis[next] == 0) {
vis[next] = 1;
q.push(make_pair(next, cnt + 1));
}
}
for (int i = 1; now - (jump[now] * i) >= 1; i++) {
int next = now - jump[now] * i;
if (vis[next] == 0) {
vis[next] = 1;
q.push(make_pair(next, cnt + 1));
}
}
}
if (swc == 0) {
cout << -1;
}
else cout << res; //swc==1์ด๋ผ๋ฉด ๋๋ฌํ๊ธฐ๊น์ง ์ ํํ ํ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฏธ์ธ๋จผ์ง ์๋ !(17144) (0) | 2022.03.06 |
---|---|
[BOJ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ(14888) (0) | 2022.03.06 |
[BOJ] ํผ๊ฑฐ์จ๊ณผ ์ฌ๊ณผ(2942) (0) | 2022.03.05 |
[BOJ] ์ค ์ธ์ฐ๊ธฐ(2252) (0) | 2022.03.05 |
[BOJ] ACM Craft(1005) (0) | 2022.03.05 |