풀이
문제에서 주어진 모든 정보를 받은 후 주사위 각 면의 정수를 저장할 리스트를 생성한다.
먼저 주사위는 지도 바깥으로 이동시킬 수 없기 때문에 명령을 수행할 반복문 안에서 주사위가 범위 밖으로 나가지 못하게끔 조건문을 씌워준다.
이후 주어진 명령 K에 따라서 동, 서, 남, 북 으로 주사위가 지도 위에서 구르며 위치를 이동하고 바닥면의 정수를 바꾸기 때문에 명령 K에 따른 4가지 변환이 필요하다.
위 그림 처럼 주사위의 상하좌우전후 면의 인덱스를 설정하고 각 방향으로 이동했을 때 정수 위치를 변환시켜준다.
마지막으로 지도에 위치한 정수가 0 일 경우와 아닐 경우의 구현사항을 조건문을 통해 구현해주고 주사위의 상단인 dice[5] 를 출력해주면된다.
소스코드
import sys
input = sys.stdin.readline
N, M, x, y, K = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
move = list(map(int, input().split()))
dice = [0, 0, 0, 0, 0, 0]
# 동, 서, 북, 남
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
for m in move:
if 0 <= x+dx[m-1] < N and 0 <= y+dy[m-1] < M: # board 밖으로 나가지 않을 경우
x += dx[m-1]
y += dy[m-1]
if m == 1:
dice[1], dice[2], dice[3], dice[5] = dice[2], dice[3], dice[5], dice[1]
elif m == 2:
dice[1], dice[2], dice[3], dice[5] = dice[5], dice[1], dice[2], dice[3]
elif m == 3:
dice[0], dice[2], dice[4], dice[5] = dice[5], dice[0], dice[2], dice[4]
elif m == 4:
dice[0], dice[2], dice[4], dice[5] = dice[2], dice[4], dice[5], dice[0]
if board[x][y] == 0: # board가 0 일 경우 dice의 바닥면 복사
board[x][y] = dice[2]
else: # board 숫자 dice 바닥면으로 복사 후 0
dice[2] = board[x][y]
board[x][y] = 0
print(dice[5])