1600. ๋ง์ด ๋๊ณ ํ ์์ญ์ด
by rlaehddnd0422https://www.acmicpc.net/problem/1600
(0,0)์์ ์์ํด์ (W-1,H-1)์ ๋๋ฌํ๊ธฐ๊น์ง ์ํ์ข์ฐ ๋ฌด๋น(ํ์ ์ ํ ์์) , ๊ทธ๋ฆฌ๊ณ ๋ง์ ๋ฌด๋น K๋ฒ์ ์ฌ์ฉํด์ ์ต์ํ์ ๋ฌด๋นํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋จ, 1๊ฐ์ผ๋ก๋ ์ด๋ํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ BFS์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
์๋ฃจ์ ์ ํต์ฌ์ 3์ฐจ์ bool ๋ฒกํฐ๋ฅผ ์ฌ์ฉํด์ check[ y ์ขํ ] [ x ์ขํ ] [ ๋ง์ ์์ง์ ์ฌ์ฉ ํ์ (=hcnt] ์ ๋ง๋ค์ด ์ฃผ์๋ค๋ ๊ฒ์ด๋ค.
check[y][x][0] - > (x,y) ์ขํ๋ก ์ด๋ํ๋๋ฐ ๋ง์ ์์ง์์ 0๋ฒ ์ฌ์ฉํ๋ค๋ ๋ป.
check[y][x][1] - > (x,y) ์ขํ๋ก ์ด๋ํ๋๋ฐ ๋ง์ ์์ง์์ 1๋ฒ ์ฌ์ฉํ๋ค๋ ๋ป.
์์ค์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์์ธํ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
#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 k,h,w;
vector < vector<int> > area(201, vector<int>(201));
bool check[201][201][31];
int dy[]={-1,1,0,0,-1,-2,-2,-1,1,2,2,1};
int dx[]={0,0,-1,1,-2,-1,1,2,-2,-1,1,2};
int bfs(int y,int x)
{
queue< pair< pair<int,int>,pair<int,int>>>q;
// (y์ขํ,x์ขํ), (horse๋ฌด๋น ํ์, ์ด ๋ฌด๋น ํ์)
q.push(make_pair(make_pair(y,x),make_pair(0,0)));
check[y][x][0]=true;
while(!q.empty())
{
int y = q.front().first.first;
int x = q.front().first.second;
int hcnt = q.front().second.first;
int cnt = q.front().second.second;
q.pop();
if(y==h-1 && x==w-1)
{
return cnt;
}
for(int i=0;i<12;i++)
{
int ny = y + dy[i];
int nx = x + dx[i];
if(ny>=0 && nx>=0 && ny<h && nx<w && area[ny][nx]==0)
{
// horse moving ์ฌ์ฉ
if(hcnt<k && i>=4 && check[ny][nx][hcnt+1]==false)
{
check[ny][nx][hcnt+1] = true;
q.push(make_pair(make_pair(ny,nx),make_pair(hcnt+1,cnt+1)));
}
// monkey monving ์ฌ์ฉ
if(i<4 && check[ny][nx][hcnt]==false)
{
check[ny][nx][hcnt] = true;
q.push(make_pair(make_pair(ny,nx),make_pair(hcnt,cnt+1)));
}
}
}
}
// ๋ชฉ์ ์ง์ ๋๋ฌํ์ง ๋ชปํ๊ฒฝ์ฐ
return -1;
}
int main()
{
FASTio;
cin >> k >> w >> h;
// Input
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
cin >> area[i][j];
}
}
int ans = bfs(0,0);
cout << ans;
return 0;
}
Solution
(0,0)์์ BFS๋ฅผ ์์ํด์ BFS๋ฅผํ ๋ ํ์ ์ด ๋ค๊ฐ์ง ์์๋ฅผ ์ธํํด์ฃผ์๋ค.
ํ์๋ (ํ์ฌ y์ขํ, ํ์ฌ x์ขํ), (๋ง์ ์์ง์ ์ฌ์ฉํ์, ์ด ์์ง์ ์) ๋ฅผ ์ ์ฅํ์ฌ BFS๋ฅผ ์งํํ๋๋ก ํ์๋๋ฐ,
์ฐ์ ์์ญ๋ด๋ถ์์ ํ์ฌ ๋ง์ ์์ง์ ์ฌ์ฉํ์๊ฐ main์์ ์ ๋ ฅํ k๊ฐ๋ณด๋ค ์๊ณ , ํด๋น ์ขํ๋ก ๋ง์ ์์ง์์ ์ฌ์ฉํด์ ๊ฐ๋ณธ ์ ์ด ์๋ค๋ฉด, ํด๋น ์ขํ๋ก ๋ง์ ์์ง์์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํ์ ๋ง์ ์์ง์์ ์ฌ์ฉํ ๋ค์ ์ขํ์ ๋ง์ ์์ง์์ ์๋ฏธํ๋ hm+1, cnt+1์ ํธ์ฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์์ญ์ด์ ์์ง์(์ํ์ข์ฐ)์ ์ฌ์ฉํ์ฌ ํด๋น์ขํ์ ๊ฐ๋ณด์ง ์์ ๊ฒฝ์ฐ, ํ์ ๋ค์ ์ขํ์ hm, cnt+1์ ํธ์ฌํด์ค๋ค.
์ด๋ ๊ฒ BFS๋ฅผ ์งํํ๋ค ๋ชฉ์ ์ง์ ๋๋ฌํ๋ฉด ์ด ์์ง์ ํ์๋ฅผ ๋ฆฌํด.
๋ง์ฝ ํ์ ์๋ ์์๊ฐ ๋ชจ๋ pop๋ ๋์ ๋ชฉ์ ์ง์ ๋๋ฌํ์ง ๋ชปํ์์ผ๋ฉด -1์ ๋ฆฌํด
๋ง์ ์์ง์์ ์ ์ฅํ๋ค๋ ์์ด๋์ด๋ง ์์ผ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ค.
์ด ๋ฌธ์ ๋ ๋ค์ ๋ฌธ์ ์ ๊ฐ์ ์ ํ์ผ๋ก ํ์ฌ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ ์ฅํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
๋ค์ ๋ฌธ์ ๋ค์ ๋ค์ ํฌ์คํ ์์ ์งง๊ฒ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
https://www.acmicpc.net/problem/2206
https://www.acmicpc.net/problem/14442
'๐ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2151. ๊ฑฐ์ธ์ค์น (0) | 2023.02.03 |
---|---|
14442. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2023.02.01 |
5014. ์คํํธ๋งํฌ (0) | 2023.01.28 |
3187. ์์น๊ธฐ ๊ฟ (0) | 2023.01.27 |
17089. ์ธ ์น๊ตฌ (0) | 2023.01.24 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422