https://www.acmicpc.net/problem/14499
"""
"""
from sys import stdin
input = stdin.readline
n, m, x, y, k = map(int, input().split())
pan = [ list(map(int, input().split())) for _ in range(n) ]
direction = list(map(int, input().split())) # 동쪽 : 1, 서쪽 : 2, 북쪽 : 3, 남쪽 : 4
dice = [0] * 6 # 위쪽 : 0, 옆면(앞) : 1, 옆면(동) : 2, 옆면(뒤) : 3, 옆면(서) : 4, 밑면 : 5
mx, my = x, y # 지도에서 다음 위치
dx, dy = [0, 0, -1, 1], [1, -1, 0, 0] # 동, 서, 북, 남
for dir in direction:
# 지도에서의 다음 좌표 갱신
mx = x + dx[dir-1]
my = y + dy[dir-1]
# 만약 범위를 벗어 나는 경우 좌표를 원 위치 하고 다음 반복문으로 넘어감.
if not (0 <= mx < n and 0 <= my < m):
mx = x
my = y
continue
# 만약 위에서 지도의 범위를 벗어나지 않는다면 주사위도 마찬가지로 동,서,북,남에 따른 값을 바꿔줌.
if dir == 1: # 동쪽
dice[0], dice[2], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[2]
elif dir == 2: # 서쪽
dice[0], dice[2], dice[4], dice[5] = dice[2], dice[5], dice[0], dice[4]
elif dir == 3: # 북쪽
dice[0], dice[1], dice[3], dice[5] = dice[1], dice[5], dice[0], dice[3]
elif dir == 4: # 남쪽
dice[0], dice[1], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[1]
# 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다.
# 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다.
if pan[mx][my] == 0:
pan[mx][my] = dice[5]
elif pan[mx][my] != 0:
dice[5] = pan[mx][my]
pan[mx][my] = 0
# 좌표를 업데이트 해줌.
x, y = mx, my
# 주사위 제일 윗면을 출력한다.
print(dice[0])
주사위를 굴리는 부분을 처음에 4*3 배열로 만들었다가 헷갈려서 코드 작성을 제대로 하지못함.
주사위는 6면이니 크기가 6인 1차원 배열을 생성한 후 각 인덱스에 따른 주사위의 윗면, 옆면, 밑면을 정해주고 업데이트 해주면 된다. 자세한 그림과 설명은 참고자료에 있음!