네모네모 안과에서는 아래와 같은 방법을 이용하여 시력검사를 진행한다.
격자가 그려진 흰색 바탕의 N × M 직사각형의 내부에 한 변의 길이가 3보다 큰 홀수이며 행 또는 열에 평행인 단 하나의 정사각형의 테두리를 색칠한다.
이때 정사각형의 네 변 중 한 변의 가운데는 색칠하지 않으며 이 색칠하지 않은 변이 정사각형의 어느 변인지를 맞추어 보라는 것으로 시력 검사를 진행한다.
예를 들어 N = 7, M = 8 직사각형 내부에 조건에 맞는 다음과 같은 정사각형을 그릴 수 있다.
왼쪽 예제의 경우 색칠하지 않은 변이 오른쪽, 오른쪽 예제의 경우 아래쪽에 있는 것을 알 수 있다.

조건에 맞는 입력만 주어질 때, 모든 시력 검사 데이터를 통과하는 프로그램을 작성해보자.
첫 번째 줄에 직사각형의 높이 N과 너비 M이 주어진다. (5 ≤ N, M ≤ 100)
두 번째 줄부터 N개의 줄에 길이가 M인 문자열이 주어진다. i+1번째 줄의 j번째 문자가 ‘ # ’ 일 경우 색칠한 칸, ‘ . ’ 일 경우 색칠하지 않은 칸을 나타낸다.
문제에서 제시한 조건에 맞는 입력만 주어진다.
정사각형의 색칠하지 않은 한 변이 왼쪽, 오른쪽, 위쪽, 아래쪽일 때에 따라 각각 LEFT, RIGHT, UP, DOWN을 출력한다.
일단 문제 자체는 간단한데 비어있는걸 확인하는 방법을 구현하는 과정에서 정사각형의 좌상단을 찾고 동일한 행에서 '.'이 나올때까지 크기를 구한 다음 좌상단의 좌표와 크기를 이용하여 뚫린곳을 찾아보려 했다. 그런데 이 방법이 잘되지않아 우하단의 좌표를 찾아 각변의 길이를 계산하여 각변의 중간이 무엇인지 확인하는 방법으로 구현하여 해결하였다.
#include<iostream>
#include<string>
using namespace std;
void sol() {
int n, m;
cin >> n >> m;
string* s = new string[n];
for (int i = 0; i < n; i++)
cin >> s[i];
int xu, yu,xd,yd;
bool flag = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
if (flag == false && s[i][j] == '#') {
xu = i;
yu = j;
flag = true;
}
if (flag == true) break;
}
flag = false;
for (int i = n-1; i >0 ; i--) {
for (int j = m-1; j > 0; j--)
if (flag == false && s[i][j] == '#') {
xd = i;
yd = j;
flag = true;
}
if (flag == true) break;
}
int d = (xd - xu + 1) / 2;
if (s[xu][yu + d] == '.') cout << "UP";
else if (s[xd][yu + d] == '.') cout << "DOWN";
else if (s[xu+d][yu] == '.') cout << "LEFT";
else if (s[xu+d][yd] == '.') cout << "RIGHT";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
sol();
}

그리 어려운 문제는 아니였는데 간단하게 풀어보려고 하다가 오히려 어렵게 생각한 부분이 있었던거 같다.