본문 바로가기
Algorithm

[백준 2823] 유턴 싫어

by YEON-DU 2020. 1. 19.
반응형

https://www.acmicpc.net/problem/2823

 

2823번: 유턴 싫어

문제 상근이는 여자친구와의 드라이브를 위해서 운전을 배우고 있다. 도로 연수를 10년쯤 하다 보니 운전은 그럭저럭 잘하게 되었다. 하지만, 그는 유턴을 하지 못한다. 10년동안 도로 연수를 받았지만 유턴을 하지 못한다. 밥먹고 유턴만 연습했지만, 결국 유턴은 하지 못했다. 상근이는 유턴을 연습하기 위해서 시간을 투자하는 대신에 유턴을 할 필요가 없고, 유턴이 금지된 마을로 이사가려고 한다. 상근이가 이사가려고 하는 마을은 막다른 길이 있으면 안 된다. 막

www.acmicpc.net

#include <iostream>
#include <vector>
#include <string>
using namespace std;

vector <string> town;
int R, C;

int checkTown()
{
	pair<int, int> dir[4] = { {1,0}, {-1,0}, {0,1}, {0, -1} };
	// 상하좌우 중 3방향이 막혀있다면 반드시 유턴을 해야한다
	for (int i = 0; i < R; i++)
		for (int j = 0; j < C; j++)
		{
			if (town[i][j] == 'X')
				continue;
			else
			{
				int count = 0;
				for (int k = 0; k < 4; k++)
				{
					if (i + dir[k].first < 0 || j + dir[k].second < 0 || i + dir[k].first >= R || j + dir[k].second >= C) // 만약 범위를 벗어나면 (가장자리라면)
					{
						count++; // 벽으로 취급
						continue;
					}
					
					if (town[i + dir[k].first][j + dir[k].second] == 'X') // 해당 방향이 벽이라면
						count++;
				}

				if (count > 2) // 3개 이상이 벽이라면
					return 1;
			}
		}

	return 0;
}

int main()
{
	cin >> R >> C;
	
	for (int i = 0; i < R; i++)
	{
		string t;
		cin >> t;
		town.push_back(t);
	}
	
	cout << checkTown();


	return 0;
}
반응형

'Algorithm' 카테고리의 다른 글

[백준 1756] 피자 굽기  (0) 2020.01.19
[백준 10709] 기상캐스터  (0) 2020.01.19
[백준 1008] A/B  (0) 2020.01.17
[백준 1260] DFS와 BFS  (0) 2020.01.16
C++ 정리  (0) 2020.01.14

댓글