https://www.acmicpc.net/problem/2823
목적
막다른 길이 있는지 없는지 확인한다.
접근법
1. 모든 길을 방문하여 막다른 길이 있는지 없는지 검사한다.
2. 막다른 길이 아니면, 상하좌우 네방향중 2방향 이상으로 이동할 수 있음을 인지한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include<iostream>
#define f(a,b) for(int a=0;a<b;++a)
using namespace std;
int R, C,cnt;
int d[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
string s[10];
bool canMove(int i, int j) {
if (i == -1 || j == -1 || i == R || j == C|| s[i][j] == 'X')return false;
return true;
}
bool solve() {
f(i, R)f(j, C)if(s[i][j]=='.') {
int cnt=0;
f(k, 4)if (canMove(i + d[k][0], j + d[k][1]))++cnt;
if (cnt == 1)return false;
}
return true;
}
int main() {
cin >> R >> C;
f(i, R)cin >> s[i];
cout << (solve() ? 0 : 1)<<endl;
}
|
'Problem Solving > BOJ 백준' 카테고리의 다른 글
[ BOJ 백준 6359번 - 만취한 상범 ] 해설 및 코드 (0) | 2019.12.09 |
---|---|
[ BOJ 백준 2163번 - 초콜릿 자르기 ] 해설 및 코드 (0) | 2019.12.09 |
[ BOJ 백준 2629번 - 양팔저울 ] 해설 및 코드 (0) | 2019.12.09 |
[ BOJ 백준 3109번 - 빵집 ] 해설 및 코드 (0) | 2019.12.09 |
[ BOJ 백준 2339번 - 석판 자르기 ] 해설 및 코드 (0) | 2019.12.08 |