문제 : https://www.acmicpc.net/problem/18242


[ 알고리즘풀이 ]

먼저 정사각형의 왼쪽 위, 오른쪽 아래 지점의 좌표를 찾습니다. 그러면 우리는 정사각형의 한 변의 길이를 알 수 있고, 길이를 2로 나눈 값(d)를 얻어낼 수 있습니다.

정사각형 왼쪽 위에서 d 만큼 오른쪽으로 이동했을 때 '.' 이 있다면 UP

정사각형 왼쪽 위에서 d 만큼 아래로 이동했을 때 '.' 이 있다면 LEFT

정사각형 오른쪽 아래에서 d 만큼 왼쪽으로 이동했을 때 '.' 이 있다면 DOWN

정사각형 오른쪽 아래에서 d 만큼 위쪽으로 이동했을 때 '.' 이 있다면 RIGHT 가 됩니다.

#include<iostream>
#include<string>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int N, M; char map[105][105] = {};
	cin >> N >> M;
	for (int i = 0; i < N; i++)
		cin >> map[i];

	int rowLU, colLU, rowRD, colRD;
	for (int i = 0; i < N; i++)
		for (int j = 0; j < M; j++)
			if (map[i][j] == '#') {
				rowLU = i, colLU = j;
				i = N, j = M;
			}
	for (int i = N - 1; i >= 0; i--)
		for (int j = M - 1; j >= 0; j--)
			if (map[i][j] == '#') {
				rowRD = i, colRD = j;
				i = -1, j = -1;
			}
	int d = ((rowRD - rowLU) + 1)/2;
	if (map[rowLU][colLU + d] == '.')
		cout << "UP";
	else if (map[rowLU + d][colLU] == '.')
		cout << "LEFT";
	else if (map[rowRD - d][colRD] == '.')
		cout << "RIGHT";
	else
		cout << "DOWN";
	return 0;
}

 

+ Recent posts