소스 코드

def move(items):
    for w in range(3):
        dice[items[2*w]], dice[items[2*w+1]] = dice[items[2*w+1]], dice[items[2*w]]
    return

# 0 동 서 북 남
# dir의 값이랑 맞추기 위해 앞에 0 추가
x = [0,0,0,-1,1]
y = [0,1,-1,0,0]

# n,m,i,j,k
n,m,i,j,k = map(int,input().split())

board = [list(map(int,input().split())) for _ in range(n)]

# 방향들 저장
dir = list(map(int,input().split()))

# 초기 주사위 값
dice = [0,0,0,0,0,0]

# 주사위 위치
dice_idx = [i,j]

for q in dir:
    ni = dice_idx[0]+x[q]
    nj = dice_idx[1]+y[q]

    # 범위 안에 있으면
    if 0 <= ni < n and 0 <= nj < m:
        
        # 주사위 위치 갱신
        dice_idx = [ni,nj]
        
        # 굴리는 방향에 따라 주사위 값 갱신하기
        if q == 1:
            move([0,1,0,2,2,3])

        elif q == 2:
            move([0,1,1,2,1,3])

        elif q == 3:
            move([1,4,2,5,1,2])

        else:
            move([1,4,2,5,4,5])

        # 바닥의 값에 따라 바닥, 주사위 밑 면 갱신
        if board[ni][nj] == 0:
            board[ni][nj] = dice[2]

        else:
            dice[2] = board[ni][nj]
            board[ni][nj] = 0

        print(dice[1])

 


해결 방법

1. 상 하 좌 우 방향에 따라 주사위의 각 면이 어느 방향에서 보이는지 확인한다

ex)

  2(앞)  
4(왼) 1(위) 3(오)
  5(아래)  
  6(바닥)  

를 [4,1,6,3,2,5] 형태로 작성한다.

-> 오른쪽으로 굴릴 경우

  2(앞)  
6(왼) 4(위) 1(오)
  5(아래)  
  3(바닥)  

[6,4,3,1,2,5]의 형태로 바뀐다.

 

2. 이처럼 굴리는 방향에 따라서 다르게 변경됨

 

3. 변경되는 규칙을 작성한 후, 다른 조건을 적용하면 됨


느낀 점

사실 이렇게 푸는 것이 문제 제출자의 의도인지는 모르겠다...

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.