[๋ฐฑ์ค(BOJ)] ์ด๋ชจํฐ์ฝ(14226) C++
๋ฌธ์ : BOJ_14226๋ฒ ์ด๋ชจํฐ์ฝ
๋ฌธ์ ์ค๋ช
bfs
์ฒ์์ ํ ๊ฐ์ ์ด๋ชจํฐ์ฝ์ด ์๊ณ
์ด๋ชจํฐ์ฝ์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ ๋ count +1
์ด๋ชจํฐ์ฝ์ ๋ถ์ฌ๋ฃ๊ธฐ ํ ๋ count +1(ํด๋ฆฝ๋ณด๋๊ฐ ๋น์ด์์ผ๋ฉด ์ ๋ฉ๋๋ค.)
ํ์ฌ ์ด๋ชจํฐ์ฝ์ ์๋ฅผ -1 ํ ๋ count +1
์ผ ๋ ์ฃผ์ด์ง๋ ์์ ์ด๋ชจํฐ์ฝ ๊ฐ์๊ฐ ๋ ๋๊น์ง ์ต์ count๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
Solution
์ต์๊ฐ์ ๊ตฌํด์ผ ๋๊ธฐ ๋๋ฌธ์ bfs๋ฅผ ์จ์ผ ํ๋๋ฐ ์ข ๊น๋ค๋ก์ด ๋ฌธ์ ์
๋๋ค.
๋งค ํ ์ ๋ง๋ค ์ด๋ชจํฐ์ฝ ์ -1, ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ, ํด๋ฆฝ๋ณด๋ ๋ถ์ฌ๋ฃ๊ธฐ์ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ก queue์ push ํด์ผ ๋์ง๋ง,
ํ์ฌ ์ด๋ชจํฐ์ฝ์ ์์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅ๋ ์ด๋ชจํฐ์ฝ์ ์์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ์๊ฐ ๋ชจ๋ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์vis[ํ์ฌ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ ์][ํด๋ฆฝ๋ณด๋์ ์ ์ฅ๋ ์ด๋ชจํฐ์ฝ ์]
๋ก bfs๋ฅผ ํด์ฃผ๋ ๊ฒ ์ด ๋ฌธ์ ์ ์๋ฃจ์
์
๋๋ค!
Description
๋ ๊ฐ์ pair๋ฅผ ์จ์ ์ธ ๊ฐ์ ๋ณ์๋ฅผ queue์ ๋ด์ต๋๋ค. (ํ์ฌ ๊ฐ, ํด๋ฆฝ๋ณด๋ ์ ์ฅ ๊ฐ, ํ์ ๊ฐ)
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
int n,res;
int vis[1001][1001]; // vis[ํ์ฌ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ ์][ํด๋ฆฝ๋ณด๋์ ์ ์ฅ๋ ์ด๋ชจํฐ์ฝ ์]
queue < pair<int, pair<int, int>>> q; // ๋ ๊ฐ์ pair๋ฅผ ์จ์ ์ธ ๊ฐ์ ๋ณ์๋ฅผ queue์ ๋ด์์ต๋๋ค.
int main(void) {
scanf("%d", &n);
memset(vis, -1, sizeof(vis));
vis[1][0] = 1;
q.push({ 1,{0,0} });
while (!q.empty()) {
int now = q.front().first;
int save = q.front().second.first;
int cnt = q.front().second.second;
if (now == n) { // ์ํ๋ ์๋ฅผ queue์์ ์ฐพ์ผ๋ฉด ๋ฐ๋ก break๋ฅผ ํด ์ต์ ํ์ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
res = cnt;
break;
}
q.pop();
if (vis[now - 1][save] == -1) {
if (now - 1 > 0) {
vis[now - 1][save] = 1;
q.push({ now - 1,{save,cnt + 1} });
}
}
if (vis[now][now] == -1) {
vis[now][now] = 1;
q.push({ now,{now,cnt + 1} });
}
if (save != 0) {
if (now+save<=1000) {
if (vis[now + save][save] == -1) {
vis[now + save][save] = 1;
q.push({ now + save,{save,cnt + 1} });
}
}
}
}
printf("%d\n", res);
return 0;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ์ค ์ธ์ฐ๊ธฐ(2252) (0) | 2022.03.05 |
---|---|
[BOJ] ACM Craft(1005) (0) | 2022.03.05 |
[BOJ] ์๋ผ์น๊ธฐ(17291) (0) | 2022.03.05 |
[BOJ] ๋ฌธ์ ์ง(1776) (0) | 2022.03.05 |
[BOJ] ์ ๊ตฌ์ถ ์์ (16437) (0) | 2022.03.05 |