이번 문제에서는 주사위의 전개도가 매우 중요했다. 주사위에 새겨지는 수를 리스트로 관리하고, 각 방향으로 주사위가 돌아갈 때에 인덱스 1은 항상 위, 인덱스 6은 항상 아래로 향하도록 하고 방향에 따라서 값들을 회전시켜주었다. 이 과정은 당연히 주사위의 다음 위치가 그래프 범위 내에 들어가 있을 때에만 실행되도록 하였다.
dice[1]
, dice[2]
, dice[3]
, dice[4]
, dice[5]
, dice[6]
을 dice[4]
, dice[2]
, dice[1]
, dice[6]
, dice[5]
, dice[3]
로 갱신한다.dice[1]
, dice[2]
, dice[3]
, dice[4]
, dice[5]
, dice[6]
을 dice[3]
, dice[2]
, dice[6]
, dice[1]
, dice[5]
, dice[4]
로 갱신한다.dice[1]
, dice[2]
, dice[3]
, dice[4]
, dice[5]
, dice[6]
을 dice[5]
, dice[1]
, dice[3]
, dice[4]
, dice[6]
, dice[2]
로 갱신한다.dice[1]
, dice[2]
, dice[3]
, dice[4]
, dice[5]
, dice[6]
을 dice[2]
, dice[6]
, dice[3]
, dice[4]
, dice[1]
, dice[5]
로 갱신한다.dy[i]
를 더한다.dx[i]
를 더한다.move(i)
를 호출한다.graph[ny][nx]
가 0일 경우,graph[ny][nx]
를 dice[-1]
로 갱신한다.graph[ny][nx]
가 0보다 클 경우,dice[-1]
을 graph[ny][nx]
로 갱신한다.graph[ny][nx]
를 0으로 갱신한다.dice[1]
을 출력한다.dy[i]
를 뺀다.dx[i]
를 뺀다.n, m, y, x, k=map(int,input().split())
graph=[]
for _ in range(n):
graph.append(list(map(int, input().split())))
commands=list(map(int, input().split()))
dice=[0 for _ in range(7)]
dy=[0, 0, 0, -1, 1]
dx=[0, 1, -1, 0, 0]
def move(dir):
if dir==1:
dice[1], dice[2], dice[3], dice[4], dice[5], dice[6]=dice[4], dice[2], dice[1], dice[6], dice[5], dice[3]
elif dir==2:
dice[1], dice[2], dice[3], dice[4], dice[5], dice[6]=dice[3], dice[2], dice[6], dice[1], dice[5], dice[4]
elif dir==3:
dice[1], dice[2], dice[3], dice[4], dice[5], dice[6]=dice[5], dice[1], dice[3], dice[4], dice[6], dice[2]
elif dir==4:
dice[1], dice[2], dice[3], dice[4], dice[5], dice[6]=dice[2], dice[6], dice[3], dice[4], dice[1], dice[5]
ny, nx=y, x
for i in commands:
ny+=dy[i]
nx+=dx[i]
if 0<=ny<n and 0<=nx<m:
move(i)
if graph[ny][nx]==0:
graph[ny][nx]=dice[-1]
elif graph[ny][nx]>0:
dice[-1]=graph[ny][nx]
graph[ny][nx]=0
print(dice[1])
else:
ny-=dy[i]
nx-=dx[i]