https://www.acmicpc.net/problem/3190
ํ์ด
- ๋จผ์ ๋ฑ์ ๋ชธ๊ธธ์ด๋ฅผ ๋๋ ค ๋จธ๋ฆฌ๋ฅผ ๋ค์์นธ์ ์์น์ํจ๋ค.
- ๋ง์ฝ ๋ฒฝ์ด๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ์ฌ๊ณผ๊ฐ ์์ด์ง๊ณ ๊ผฌ๋ฆฌ๋ ์์ง์ด์ง ์๋๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค์ฌ์ ๊ผฌ๋ฆฌ๊ฐ ์์นํ ์นธ์ ๋น์์ค๋ค. ์ฆ, ๋ชธ๊ธธ์ด๋ ๋ณํ์ง ์๋๋ค.
๋ค์ ์์์ ๋ง๊ฒ ๊ตฌํํ๋ฉด ๋๋ค.
๋ฑ ์ ์ฒด ์นธ์ ๋ฐ๋ก ๊ด๋ฆฌํ์ง ์๊ณ , Queue์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ๋จธ๋ฆฌ, ์ธ๋ถ ๋ณ์์ ๊ผฌ๋ฆฌ๋ฅผ ์ ์ฅํ๊ณ ๋จธ๋ฆฌ๊ฐ ์์ง์ด๋ ๋ฐฉํฅ ๊ทธ๋๋ก ๊ผฌ๋ฆฌ๊ฐ ์์ง์ด๋๋ก dirb ๋ฐฐ์ด์ ๋จธ๋ฆฌ๊ฐ ์์ง์ด๋ ๋ฐฉํฅ์ ๋ฃ์ด์คฌ๋ค.
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
// 1ํ 1์ด์ด ๊ธฐ์ค!!!!!!
// L์ ์ผ์ชฝ์ผ๋ก ํ์ , D๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์
// ์ค ์ ์ผ ์
int N, K, L, board[101][101], dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0}, dirb[101][101], vis[101][101];
char dir_change[10001];
int main(){
cin>>N>>K;
for (int i=0; i<K; i++) {
int x, y; cin>>x>>y;
board[x][y] = 1;
// apple
}
cin>>L;
for (int i=0; i<L; i++) {
int X; char C;
cin>>X; cin>>C;
dir_change[X] = C;
}
// ๋ฑ์ ์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ค.
queue<pair<int,int> >q;
q.push(make_pair(1, 1));
vis[1][1] = 1;
int sec = 0, dir = 0, tx=1, ty = 1;
while (!q.empty()) {
auto cur = q.front(); q.pop();
sec += 1;
// ๋จธ๋ฆฌ๋ฅผ ๋ค์์นธ์ ์์น์ํด
dirb[cur.first][cur.second] = dir;
int nx = cur.first + dx[dir];
int ny = cur.second + dy[dir];
// ๋ฒฝ์ด๋ ์๊ธฐ ์์ ํํ
๋ฟ์์ ๊ฒฝ์ฐ
if (nx > N || nx <= 0 || ny > N || ny <= 0 || vis[nx][ny]) break;
// ์ด๋ํ ์นธ์ ์ฌ๊ณผ ์ฒดํฌ
if (!board[nx][ny]){
// ์์ ๊ฒฝ์ฐ ๊ผฌ๋ฆฌ๋ฅผ ์ด๋.
vis[tx][ty] = 0;
int dir_s = dirb[tx][ty];
tx += dx[dir_s];
ty += dy[dir_s];
}else {
// ์์๊ฒฝ์ฐ
board[nx][ny] = 0;
}
if (dir_change[sec] == 'D') dir = (dir+1)%4;
if (dir_change[sec] == 'L') {
dir -= 1;
if (dir == -1) dir += 4;
}
vis[nx][ny] = 1;
q.push(make_pair(nx, ny));
}
cout<<sec;
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 14499 (0) | 2025.04.03 |
---|---|
๋ฐฑ์ค 13458 (0) | 2025.03.30 |
๋ฐฑ์ค 12100 (์ผ์ฑ ๊ธฐ์ถ) (0) | 2025.03.28 |
27. Remove Element (0) | 2025.03.21 |
DP - ์์ดํ ์ ์ ์ ํ ๊ณ ๋ฅด๋ ๋ฌธ์ (0) | 2025.03.21 |