기술 블로그

18242번 네모네모 시력검사 본문

알고리즘 문제/BOJ

18242번 네모네모 시력검사

parkit 2020. 1. 13. 01:12
728x90
반응형

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



단순 구현 문제이다.



우선 #가 시작 위치(맨왼쪽위), 끝 위치(맨오른쪽아래)의 좌표(행, 열)를


구해주고, 가로와 세로의 길이를 구한다.


그리고 4개의 변에 있는 #의 개수를 세주면 된다.


개수와 길이가 다르다는 것은 '#'이 아닌 '.'가 포함되어 있다는 것이다.








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <bits/stdc++.h>
 
using namespace std;
 
int h, w, m[101][101], sy, sx, ey, ex, Up, Down, Left, Right;
 
int main()
{
    cin.tie(0);
    scanf("%d %d"&h, &w);
 
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            char c;
            cin >> c;
            if (c == '.') {
                m[i][j] = 0;
            }
            else if (c == '#') {
                m[i][j] = 1;
            }
        }
    }
 
    bool stop = false;
 
    // 시작
    for (int i = 0; i < h && !stop; i++) {
        for (int j = 0; j < w; j++) {
            if (m[i][j] == 1) {
                sy = i;
                sx = j;
                stop = true;
                break;
            }
        }
    }
 
    stop = false;
 
    // 끝
    for (int i = h - 1; i >= 0 && !stop; i--) {
        for (int j = w - 1; j >= 0; j--) {
            if (m[i][j] == 1) {
                ey = i;
                ex = j;
                stop = true;
                break;
            }
        }
    }
 
    int rowlen = ey - sy + 1;
    int collen = ex - sx + 1;
 
    // Left, Right
    for (int i = sy; i <= ey; i++) {
        if (m[i][sx]) ++Left;
        if (m[i][ex]) ++Right;
    }
 
    if (Left != rowlen) {
        printf("LEFT\n");
        return 0;
    }
    else if (Right != rowlen) {
        printf("RIGHT\n");
        return 0;
    }
 
    // Up, Down
    for (int j = sx; j <= ex; j++) {
        if (m[sy][j]) ++Up;
        if (m[ey][j]) ++Down;
    }
    
    if (Up != collen) {
        printf("UP\n");
        return 0;
    }
    else if (Down != collen) {
        printf("DOWN\n");
        return 0;
    }
 
    return 0;
}
cs










728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

3109번 빵집  (0) 2020.01.20
2141번 우체국  (0) 2020.01.20
1780번 종이의 개수  (0) 2020.01.13
1748번 수 이어 쓰기 1  (0) 2020.01.12
3049번 다각형의 대각선  (0) 2020.01.10