https://www.acmicpc.net/problem/14503
14503๋ฒ: ๋ก๋ด ์ฒญ์๊ธฐ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด
www.acmicpc.net
DFS๋ฅผ ์ฌ์ฉํด์ ํ์๋ค. ์ด์ ์ ํ์๋ ๋ฌธ์ ์ ์ข ๋ฌ๋๋ ๋ถ๋ถ์ ๋ณดํต ํ ๊ตฐ๋ฐ์์๋ง DFS๋ฅผ ์คํํ๋ ์ฌ๊ทํจ์ ๊ตฌ์กฐ์ธ๋ฐ ์ด ๊ฒฝ์ฐ์๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ๊ตฐ๋ฐ์์ ์คํ๋ ์ ์๋ค๋ ์ ์ด์๋ค. ๋ฌผ๋ก ํ๋ฒ๋ง ์คํ๋๋ ๊ฑด ๋์ผ!
๊ทธ๋ฆฌ๊ณ ํ ๋ถ๋ถ์์ ์ค์ํ๋ค. ๋ฌธ์ ์์ ๋ ์ฒญ์ํ ์ ์๋ ๊ณต๊ฐ ์์ผ๋ฉด "๋ฐฉํฅ์ ์ ์งํ ์ฑ" ํ์ง์ ํด์ผ๋๋ค๊ณ ํ์๋ค. ํ์ง๋ง "ํ์งํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ๊พธ๊ณ " ํ์ด์ ์ ๋๋ก ์คํ๋์ง ์์์๋ค.
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define MAXN 50
int N, M;
int R, C, D;
int map[MAXN+10][MAXN+10];
int visited[MAXN+10][MAXN+10];
static int dr[] = { -1, 0, 1, 0 };
static int dc[] = { 0, 1, 0, -1 };
int cnt;
void InputData(void) {
cin >> N >> M;
cin >> R >> C >> D;
memset (map, 0, sizeof(map));
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
cin >> map[i][j];
}
}
visited[R][C] = 1;
cnt ++;
}
void Solve(void) {
int nr, nc, dir;
int flag = 0;
for(int i = 1; i <= 4; i++){
dir = (D + 4 - i) % 4;
nr = R + dr[dir]; // ์ผ์ชฝ์ผ๋ก ๋๋ฆฐ๋ค
nc = C + dc[dir];
if(map[nr][nc] == 1 || visited[nr][nc]) continue; // ๋ฒฝ, ์ฒญ์
if(nr<0||nr>=N||nc<0||nc>=M) continue; // ๋ฒ์ ๋ฐ
visited[nr][nc] = 1;
flag = 1;
R = nr, C = nc, D = dir;
cnt ++;
Solve();
break;
}
if(flag == 0) {
dir = (D + 2) % 4; // ๋ฐฉํฅ ์ ์งํ ์ฑ๋ก ํ์งํด์ผํ๋๋ฐ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊ฟ.
R += dr[dir], C += dc[dir]; //ํ์ง
if(R<0||R>=N||C<0||C>=M) return; // ๋ฒ์ ๋ฐ
if (map[R][C] == 0) Solve(); // ํ์งํ ์ ์์
else return; // ํ์ง ๋ชปํจ
}
// ์ฒญ์ํ ๊ณต๊ฐ์ด๋ผ๋ฉด ๋ฐฉํฅ ๋๋ฆฌ๊ธฐ
// ๋ค ๋ฐฉํฅ ๋ค ๋๋ ธ๋๋ฐ ๋ค ์ฒญ์ํ๊ณ ๋ฒฝ์ด๋ฉด
// ํ์งํ๊ธฐ
// ํ์ง๋ ๋ชปํ๋ฉด ๋
// ์ฒญ์์ํ์ผ๋ฉด ์ ์งํด์ ์ฒญ์ํ๊ธฐ
}
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
InputData();
Solve();
cout<<cnt<<endl;
return 0;
}
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
<C/C++> BOJ 15684: ์ฌ๋ค๋ฆฌ ์กฐ์ (0) | 2022.04.05 |
---|---|
<C/C++> BOJ 14888: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2022.04.02 |
<C/C++> BOJ 14500: ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.03.31 |
<C/C++> BOJ 13458 ์ํ๊ฐ๋ (0) | 2022.03.30 |
<C/C++> BOJ 14499: ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.03.30 |