본문 바로가기
Algorithms/simulation

두 개의 미로

by OKOK 2018. 11. 14.

현민이와 정우 서로 다른 미로에 갇힘

미로는 갈림길이 없지만, 현민이와 정우는 멍청하기 떄문에 탈출하지 못함

범수 서쪽 남쪽

현민 정우 범수 시킨 대로

미로의 끝점에 서게 되면 미로를 탈출하게 됨

미로는 북 동 남 서의 수열로 표현됨

북북동으로 가야 끝점에 도달하게 됨

만약 엔엔이로 미로에서 출발했을 떄 범수가  

#include <stdio.h>
#define MAXN (10000)
int N;
char pa[MAXN + 2], pb[MAXN + 2];
int main(void)
{
    freopen("test.txt", "r", stdin);
    int test_case;
    int T;
    /* 아래 코드를 수행하지 않으면 여러분의 프로그램이 제한 시간 초과로 강제 종료 되었을 때,
    출력한 내용이 실제 표준 출력에 기록되지 않을 수 있습니다.
    따라서 안전을 위해 반드시 setbuf(stdout, NULL); 을 수행하시기 바랍니다.
    */
    setbuf(stdout, NULL);
    scanf("%d", &T);
    /*
    여러 개의 테스트 케이스를 처리하기 위한 부분입니다.
    */

    

    for (test_case = 1; test_case <= T; ++test_case)
    {
        int ans = 0;
        scanf("%d", &N);
        scanf("%s", pa);
        scanf("%s", pb);

        if (pa[N - 1] == pb[N - 1]) {
            ans = 1;
        }
        else {
            switch (pa[N - 1]) {
            case 'E':
                ans = (pb[N - 1] == 'S') ? 1 : (pb[N - 1] == 'N') ? 1 : 0;
                break;
            case 'W':
                ans = (pb[N - 1] == 'S') ? 1 : (pb[N - 1] == 'N') ? 1 : 0;
                break;
            case 'S':
                ans = (pb[N - 1] == 'E') ? 1 : (pb[N - 1] == 'W') ? 1 : 0;
                break;
            case 'N':
                ans = (pb[N - 1] == 'E') ? 1 : (pb[N - 1] == 'W') ? 1 : 0;
                break;
            }
            if (1 == ans && N >= 2) {
                if ((pa[N - 1] == 'W' && pb[N - 2] == 'E') || (pa[N - 1] == 'E' && pb[N - 2] == 'W')) {
                    if ((pa[N - 2] == 'S' && pb[N - 1] == 'N') || (pa[N - 2] == 'N' && pb[N - 1] == 'S')) {
                        ans = 0;
                    }
                }
                if ((pa[N - 1] == 'S' && pb[N - 2] == 'N') || (pa[N - 1] == 'N' && pb[N - 2] == 'S')) {
                    if ((pa[N - 2] == 'W' && pb[N - 1] == 'E') || (pa[N - 2] == 'E' && pb[N - 1] == 'W')) {
                        ans = 0;
                    }
                }
            }
        }


        printf("#%d %s\n", test_case, ans >= 1 ? "YES" : "NO");
    }

    return 0; //정상종료시 반드시 0을 리턴해야 합니다.
}

- 오케이
- 이렇게 이렇게 모든 루트에 대해서 경우의 수를 나누어서 적용함
- 경우의 수 찾는 것이 일
- ? : 이렇게 다음으로 넘어가서 바로 ? : 이것을 바로 또 사용하기 가능함 

 

'Algorithms > simulation' 카테고리의 다른 글

온라인 팰린드롬  (0) 2018.11.14
온라인 지구 온난화  (0) 2018.11.14
2-1 조 구성하기  (0) 2018.11.14
6-1 단어가 등장하는 횟수  (0) 2018.11.12
2-3 괄호  (0) 2018.11.12

댓글