주사위가 맵을 돌아다니면서 맵과 주사위의 숫자가 교환되는 법칙을 구현하는 문제이다.
고려했던 사항은 다음과 같다.
풀이 과정은 다음과 같다.
문제에서 전개도 그림을 보여주면서 힌트를 준 문제였다. 그래도, 처음에는 입체적인 주사위를 어떻게 다뤄야할지 막막했다... 구현, 시뮬레이션 문제를 풀 때마다 느끼지만 문제를 정확히 읽는 능력이 정말 중요한 것 같다.
import sys
def move(diceMap, i, j, dice, direction):
origin = ([dm[:] for dm in diceMap], i, j, [d[:] for d in dice])
if direction == 1:
j += 1
dice[1][0], dice[1][1], dice[1][2], dice[3][1] = dice[3][1], dice[1][0], dice[1][1], dice[1][2]
elif direction == 2:
j -= 1
dice[1][0], dice[1][1], dice[1][2], dice[3][1] = dice[1][1], dice[1][2], dice[3][1], dice[1][0]
elif direction == 3:
i -= 1
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[1][1], dice[2][1], dice[3][1], dice[0][1]
else:
i += 1
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[3][1], dice[0][1], dice[1][1], dice[2][1]
if i < 0 or i >= n or j < 0 or j >= m:
return origin
if diceMap[i][j] == 0:
diceMap[i][j] = dice[3][1]
else:
dice[3][1] = diceMap[i][j]
diceMap[i][j] = 0
print(dice[1][1])
return (diceMap, i, j, dice)
n, m, x, y, k = map(int, sys.stdin.readline().strip().strip().split(' '))
diceMap = [[] for _ in range(n)]
for _n in range(n):
line = map(int, sys.stdin.readline().strip().strip().split(' '))
for l in line:
diceMap[_n].append(l)
dice = [[0 for _ in range(3)] for _ in range(4)]
i, j = x, y
directions = map(int, sys.stdin.readline().strip().strip().split(' '))
for direction in directions:
diceMap, i, j, dice = move([dm[:] for dm in diceMap], i, j, [d[:] for d in dice], direction)