문제 : 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;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 11049 : 행렬 곱셈 순서 - travelbeeee (0) | 2020.02.06 |
---|---|
[BOJ] 10826 : 피보나치 수 4 - travelbeeee (0) | 2020.02.05 |
[BOJ] 10164 : 격자상의 경로 - travelbeeee (0) | 2020.02.05 |
[BOJ] 3076 : SAHOVNICA - travelbeeee (0) | 2020.02.04 |
[BOJ] 10824 : 네 수 - travelbeeee (0) | 2020.02.04 |