문제 풀이/Baekjoon Online Judge
[Baekjoon - 18242] 네모네모 시력검사
hibye1217
2023. 2. 13. 14:47
난이도: Silver V
태그
더보기
- Implementation
- Ad-Hoc
풀이
1. 일단 사각형을 찾자.
더보기
사각형의 모든 위치를 찾는 건 아무래도 어렵고, 불필요할 정도로 많은 정보입니다.
대신에, 사각형의 좌측 상단과 우측 하단의 위치만 알고 있다면,
그걸 토대로 한 사각형을 다시 만들 수 있으므로 문제없겠죠.
2. 구멍이 뚫릴 수 있는 부분은?
더보기
각 변의 중점입니다.
이는, 한 축은 사각형의 중심에 있고, 다른 한 축은 사각형의 끝점에 위치해있다는 소리죠.
// 예로, (중심, 왼쪽 끝)은 왼쪽 변에 뚫린 구멍을 의미합니다.
// (위쪽 끝, 중심)은 위쪽 변에 뚤린 구멍이죠.
그러니, 이렇게 찾을 수 있는 4개의 좌표에 대해, 진짜 구멍이 뚫렸는지 판별하고,
만약 구멍이 뚫렸다면 그 위치에 해당하는 방향을 출력해주면 됩니다.
3. 코드
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
char mp[120][120];
void Main(){
int n, m; cin >> n >> m;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){ cin >> mp[i][j]; }
}
pi2 st = {-1, -1}, ed = {-1, -1};
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
if (mp[i][j] == '#'){
if (st.fr == -1){ st = {i, j}; } ed = {i, j};
}
}
}
int yst = st.fr, yed = ed.fr; int ym = yst+yed >> 1;
int xst = st.sc, xed = ed.sc; int xm = xst+xed >> 1;
if (mp[yst][xm] == '.'){ cout << "UP"; }
if (mp[yed][xm] == '.'){ cout << "DOWN"; }
if (mp[ym][xst] == '.'){ cout << "LEFT"; }
if (mp[ym][xed] == '.'){ cout << "RIGHT"; }
}
|
cs |