따라서 우선 주사위의 움직임부터 구현했다.
주사위가 처음에 아래와 같은 리스트 형태로 있다고 가정하자.
[1,2,3,4,5,6] 윗면이 1 동쪽이 3 서쪽이 4 아랫면이 6 북쪽이 2 남쪽이 5
만약 동쪽으로 굴린다면? => 서쪽이 윗면으로 바뀌고 윗면이 동쪽, 동쪽이 아랫면, 아랫면이 서쪽으로 바뀐다. 북, 남은 그대로
[4,2,1,6,5,3]
다른 방향도 위와같이 생각해서 바꿔주면 아래와 같다.
서쪽으로 이동한다면? [3,2,6,1,5,4]
남쪽으로 이동한다면? [2,6,3,4,1,5]
북쪽으로 이동한다면? [5,1,3,4,6,2]
이렇게 굴렸을 때의 dice의 값을 변경해주는 함수를 작성한다.
#[1,2,3,4,5,6] 윗면이 1 동쪽이 3 서쪽이 4 아랫면이 6 북쪽이 2 남쪽이 5
# 만약 동쪽으로 이동한다면? => 서쪽이 윗면으로 바뀌고 윗면이 동쪽, 동쪽이 아랫면, 아랫면이 서쪽으로 바뀜 북 남은 그대로
# [4,2,1,6,5,3]
# 서쪽으로 이동한다면? [3,2,6,1,5,4]
# 남쪽으로 이동한다면? [2,6,3,4,1,5]
# 북쪽으로 이동한다면? [5,1,3,4,6,2]
def dicing(d_index):
a,b,c,d,e,f = dice[0], dice[1], dice[2], dice[3], dice[4], dice[5]
if d_index == 1: #동
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = d,b,a,f,e,c
elif d_index == 2: #서
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = c,b,f,a,e,d
elif d_index == 3: #북
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = e,a,c,d,f,b
elif d_index == 4: #남
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = b,f,c,d,a,e
이제 dicing은 끝났다. 이제는 실제로 굴려서 지도위에서 동작시켜야한다.
direction = [[0,1],[0,-1],[-1,0],[1,0]]
위의 direction이라는 리스트를 이용해서 지도위에서의 좌표를 계산해줬다.
그렇게 변경했을 때의 좌표와 dice의 밑바닥, 즉 dice[5]와 비교하여 지도가 0일 경우 지도에 dice[5]를 넣고 아닐경우 dice[5]에 지도의 값을 넣어주고 지도를 0으로 만들었다.
그리고 추가조건인 명령이 지도 밖으로 나가는 명령일 경우를 if문을 사용해서 처리해주었다. 아래는 전체 코드이다.
import sys
N, M, x, y, K = map(int, sys.stdin.readline().split())
ma = []
for i in range(N):
ma.append(list(map(int, sys.stdin.readline().split())))
d=list(map(int, sys.stdin.readline().split()))
direction = [[0,1],[0,-1],[-1,0],[1,0]]
dice = [0,0,0,0,0,0]
#[1,2,3,4,5,6] 윗면이 1 동쪽이 3 서쪽이 4 아랫면이 6 북쪽이 2 남쪽이 5
# 만약 동쪽으로 이동한다면? => 서쪽이 윗면으로 바뀌고 윗면이 동쪽, 동쪽이 아랫면, 아랫면이 서쪽으로 바뀜 북 남은 그대로
# [4,2,1,6,5,3]
# 서쪽으로 이동한다면? [3,2,6,1,5,4]
# 남쪽으로 이동한다면? [2,6,3,4,1,5]
# 북쪽으로 이동한다면? [5,1,3,4,6,2]
def dicing(d_index):
a,b,c,d,e,f = dice[0], dice[1], dice[2], dice[3], dice[4], dice[5]
if d_index == 1: #동
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = d,b,a,f,e,c
elif d_index == 2: #서
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = c,b,f,a,e,d
elif d_index == 3: #북
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = e,a,c,d,f,b
elif d_index == 4: #남
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = b,f,c,d,a,e
nx = x
ny = y
for d_index in d:
nx += direction[d_index-1][0]
ny += direction[d_index-1][1]
if nx<0 or nx>N-1 or ny<0 or ny>M-1:
nx -= direction[d_index-1][0]
ny -= direction[d_index-1][1]
continue
dicing(d_index)
if ma[nx][ny]==0:
ma[nx][ny] = dice[5]
else:
dice[5] = ma[nx][ny]
ma[nx][ny]=0
print(dice[0])