[BOJ] 백준 2823 유턴 싫어
문제 링크 : https://www.acmicpc.net/problem/2823
이 문제는 어느 지점에서 출발을 하든지 다시 자기 위치로 돌아오면 되는 문제이다.
여기서 중요한 점은 자기가 방금 지나온 길로 다시 돌아가면 안된다는 것이다.
즉 매 길마다 갈 수 있는 선택지가 2개 이상은 있어야 한다.
소스코드 :
#include#include using namespace std; int main() { int R, C; cin >> R >> C; string s; int **v = new int*[R]; for (int i = 0; i < R; i++) { v[i] = new int[C]; } cin.ignore(); // 선택지(' . ') 를 가지는 길의 개수를 저장할 변수 선언 int roadSize = 0; for (int i = 0; i < R; i++) { getline(cin, s); for (int j = 0; j < C; j++) { v[i][j] = s[j]; if (v[i][j] == '.') roadSize++; } } for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { int cnt = 0; // 한 선택지에서 동,서,남,북으로 이동할 수 있는 선택지 카운트. if (v[i][j] == '.') { if (i - 1 >= 0) { if (v[i - 1][j] == '.') cnt++; } if (j + 1 < C) { if (v[i][j + 1] == '.') cnt++; } if (i + 1 < R) { if (v[i + 1][j] == '.') cnt++; } if (j - 1 >= 0) { if (v[i][j - 1] == '.') cnt++; } } // 선택지가 2개 이상이면 세어야 할 길의 개수 줄임. if (cnt >= 2) roadSize--; } } // 길의 개수가 남아있다면 1, 아니면 0 출력 if (roadSize) cout << 1 << endl; else cout << 0 << endl; }
댓글
댓글 쓰기