풀이


문제에서 주어진 모든 정보를 받은 후 주사위 각 면의 정수를 저장할 리스트를 생성한다.

먼저 주사위는 지도 바깥으로 이동시킬 수 없기 때문에 명령을 수행할 반복문 안에서 주사위가 범위 밖으로 나가지 못하게끔 조건문을 씌워준다.

이후 주어진 명령 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])

References