ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Baekjoon - 18242] 네모네모 시력검사
    문제 풀이/Baekjoon Online Judge 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
Designed by Tistory.