5014. ์คํํธ๋งํฌ
by rlaehddnd0422https://www.acmicpc.net/problem/5014
Point
1. ์ฅ์์ F์ธต, ์ถ๋ฐ ์ธต์ S์ธต, S์ธต์์ S+U์ธต, S-D์ธต์ผ๋ก ์ด๋๊ฐ๋ฅํ๋ค.
2. ์ด๋ํ ๋ ๋ง๋ค ํ์ฌ์ธต + 1์ ์ ์ฅํด ์ค๋ค. G์ธต์ ๋๋ฌํ๋ฉด BFS๋ฅผ ๋ฉ์ถ๋ฉด ๋๋ค.
์์ค์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n'
using namespace std;
int f,s,g,u,d;
int visited[1000001];
bool bfs(int index)
{
queue <int> q;
q.push(index);
while(!q.empty())
{
int k = q.front();
if(k==g)
{
cout << visited[k]-1;
return false;
}
if(k+u<=f)
{
if(visited[k+u]==0)
{
q.push(k+u);
visited[k+u] = visited[k] + 1;
}
}
if(k-d>0)
{
if(visited[k-d]==0)
{
q.push(k-d);
visited[k-d] = visited[k] + 1;
}
}
q.pop();
}
return true;
}
int main()
{
FASTio;
cin >> f >> s >> g >> u >> d;
visited[s]= 1;
if(g==s) {
cout << 0;
return 0;
}
bool stare = bfs(s);
if(stare)
cout << "use the stairs";
return 0;
}
Solution
1. ์ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ S์ธต์ด G์ธต๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋ฒํผ์ ๋๋ฅด์ง ์์๋ ๋๋ 0์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
2. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ BFS๋ฅผ ์งํํ๋๋ฐ, ํ์ฌ ์ธต์ ํ์ ํธ์ฌํ๊ณ ํ์ฌ ์ธต(S)์์ ๊ฐ ์ ์๋ ์ธต์ธ S+U์ธต, S-D์ธต์ ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด
ํ์ฌ ์ธต์ ๋ฐฉ๋ฌธ ํ์+1์ ๋ค์ ์ธต(S+U, S-D) ์ ์ ์ฅํด์ฃผ๊ณ ํ์ฌ ์ธต์ POPํ๋ค
3. ์ด๋ ๊ฒ ํ๋ฅผ ๋๋ค๊ฐ G์ธต์ ๋๋ฌํ๊ฒ ๋๋ฉด visited[G]-1์ print ํด์ฃผ๊ณ false๋ฅผ ๋ฆฌํด
4. ํ๋ฅผ ๋ค๋๋ ธ๋๋ฐ๋ G์ธต์ ๋๋ฌํ์ง ๋ชปํ ๊ฒฝ์ฐ True๊ฐ ๋ฐํ๋์ด ๋ฉ์ธํจ์์์ use the stairs๋ฅผ ์ถ๋ ฅํ๋ค.
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ถ๋ฅ๊ฐ BFS๋ก ๋์ด์๊ธธ๋, ์ด๊ฒ ์ BFS๋ก ํด๊ฒฐํ๋์ง ์์ํ๋ค.
๊ฒฐ๊ตญ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค๋ ์ธก๋ฉด์์ ๋ณด๋ฉด BFS๊ฐ ๋ง๊ธดํ์ง๋ง, DP๋ก๋ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์๋ค. ํ์ง๋ง ์์ง DP๋ฅผ ๋ค๋ฃจ๊ธฐ์ ์ํด๋ฌ์ ์ฐ์ BFS๋ก ํ์ด๋ณด์๋ค. ๋์ค์ DP๋ฅผ ๊ณต๋ถํ๋ฉด DP๋ก ํ์ด๋ด์ผ๊ฒ ๋ค.
'๐ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
14442. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2023.02.01 |
---|---|
1600. ๋ง์ด ๋๊ณ ํ ์์ญ์ด (0) | 2023.02.01 |
3187. ์์น๊ธฐ ๊ฟ (0) | 2023.01.27 |
17089. ์ธ ์น๊ตฌ (0) | 2023.01.24 |
15686. ์นํจ ๋ฐฐ๋ฌ (0) | 2023.01.23 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422