#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>


int main() {


    int A[65][65];

    int B[65][65];

    int Visited[65][65][4];

    int H, W, R, C, D = 0;

    int i, j, k, count = 0, loop = 0;


    scanf("%d %d", &H, &W);


    scanf("%d %d %d", &R, &C, &D);


    for (i = 0; i < H; i++) {

        for (j = 0; j < W; j++) {

            scanf("%1d", &A[i][j]);

            if (j == (W - 1)) {

                continue;

            }

        }

    }

    for (i = 0; i < H; i++) {

        for (j = 0; j < W; j++) {

            scanf("%1d", &B[i][j]);

            if (j == (W - 1)) {

                continue;

            }

        }

    }//규칙표 입력

    for (i = 0; i < H; i++) {

        for (j = 0; j < W; j++) {

            for (k = 0; k < 4; k++) {

                Visited[i][j][k] = 0;

            }

        }

    }//초기화


    int result;


    for (loop = 1; loop <= 65 * 65 * 5; loop++) {

        D = (D + A[R][C]) % 4; //서있는 위치에서 회전




        if (D == 0) { //현재 서있는 위치의 방향정보    

            --R; //up

            if (R < 0) {

                result = loop;

                count++;

                break; //배열 탈출 조건

            }

            else if (Visited[R][C][D] == 1) {

                count++;

                Visited[R][C][D]++;

                continue;

            }

            else if ((Visited[R][C][D] == 2) && (count /= 0)) {

                count++;

                result = loop;

                break;

            }

            else {

                Visited[R][C][D] = 1; //흔적 표시

                A[R][C] = B[R][C];

                count = 0;

                continue;

            }

        }




        if (D == 1) { //현재 서있는 위치의 방향정보    

            ++C; //forward

            if (C >= W) {

                count++;

                result = loop;

                break; //배열 탈출 조건

            }

            else if (Visited[R][C][D] == 1) {

                count++;

                Visited[R][C][D]++;

                continue;

            }

            else if ((Visited[R][C][D] == 2) && (count /= 0)) {

                count++;

                result = loop;

                break;

            }

            else {

                Visited[R][C][D] = 1; //흔적 표시

                A[R][C] = B[R][C];

                count = 0;

                continue;

            }

        }




        if (D == 2) { //현재 서있는 위치의 방향정보    

            ++R; //down

            if (R >= H) {

                count++;

                result = loop;

                break; //배열 탈출  조건

            }

            else if (Visited[R][C][D] == 1) {

                count++;

                Visited[R][C][D]++;

                continue;

            }

            else if ((Visited[R][C][D] == 2) && (count /= 0)) {

                count++;

                result = loop;

                break;

            }

            else {

                Visited[R][C][D] = 1; //흔적 표시

                A[R][C] = B[R][C];

                count = 0;

                continue;

            }

        }




        if (D == 3) { //현재 서있는 위치의 방향정보    

            --C; //forward

            if (C < 0) {

                count++;

                result = loop;

                break; //배열 탈출 조건

            }

            else if (Visited[R][C][D] == 1) {

                count++;

                Visited[R][C][D]++;

                continue;

            }

            else if ((Visited[R][C][D] == 2) && (count /= 0)) {

                count++;

                result = loop;

                break;

            }

            else {

                Visited[R][C][D] = 1; //흔적 표시

                A[R][C] = B[R][C];

                count = 0;

                continue;

            }

        }

    }


    printf("%d", result - count);


    return 0;

}


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

할 수 있는건 다 한거같은데 출력값이 참 요상하게 뜸.. 어딜 뜯어고쳐야할까