[Python][백준] 14499번 주사위 굴리기

신남·2022년 8월 25일

https://www.acmicpc.net/problem/14499

공부날짜 : 2022.08.25
정답 참조 여부:X

특정 그래프 위에서 주사위를 굴리며 주사위 윗면의 숫자를 출력하는 문제이나
조건에 따라 주사위의 값이 바뀌며 그래프를 이탈하는 경우에는 해당 입력을 무시해야하는 조건이 있다.

주사위의 상태와 회전 방향을 받아와서 해당 방향으로 회전했을때 어떤 주사위가 되는지 출력하는 함수를 만들어두면 편하게 풀수있다.
명령의 입력에 따라 좌표를 옮긴 후에 그래프를 벗어났을때 조건을 넣고 그 후에 주사위를 해당방향으로 굴려주면 된다.
굴려준 후에 주사위 값의 변화와 윗면이 출력되는 값은 관계가 없으므로 순서 상관없이 윗면 출력과 바닥면의 값을 조건에 맞게 바꾸어 주면 해결 할 수 있다.

소스코드

import sys
input = sys.stdin.readline

n, m, x, y, k = map(int, input().split())

graph = []

for _ in range(n):
    graph.append(list(map(int,input().split())))
    
pass_ = list(map(int,input().split()))

#0은 바닥,1은 북쪽, 2는 동쪽, 3은 남쪽, 4는 서쪽, 5는 윗면
dice = [0]*6

#회전 방향에 맞춰서 변한 주사위를 반환하는 함수
def dice_roll(n,dice):
    new_dice = [0]*6
    
    if n == 1:
        new_dice[0] = dice[2]
        new_dice[1] = dice[1]
        new_dice[2] = dice[5]
        new_dice[3] = dice[3]
        new_dice[4] = dice[0]
        new_dice[5] = dice[4]
        
    elif n == 2:
        new_dice[0] = dice[4]
        new_dice[1] = dice[1]
        new_dice[2] = dice[0]
        new_dice[3] = dice[3]
        new_dice[4] = dice[5]
        new_dice[5] = dice[2]
       
    elif n == 3:
        new_dice[0] = dice[1]
        new_dice[1] = dice[5]
        new_dice[2] = dice[2]
        new_dice[3] = dice[0]
        new_dice[4] = dice[4]
        new_dice[5] = dice[3]
        
    elif n == 4:
        new_dice[0] = dice[3]
        new_dice[1] = dice[0]
        new_dice[2] = dice[2]
        new_dice[3] = dice[5]
        new_dice[4] = dice[4]
        new_dice[5] = dice[1]
        
    return new_dice



#초기위치에 따른 주사위 초기화
#초기위치가 0일경우 변화 없고 아닐경우만 생각하면 되므로 주사위 값만 변화
dice[0] = graph[x][y]

# 입력이 1,2,3,4로 주어지므로 index로 넣었을때 그방향으로 가도록 설계
# 1이 동쪽 2는 서쪽 3은 북쪽 4는 남쪽
dx = [0,0,0,-1,1]
dy = [0,1,-1,0,0]

for i in range(k):
    nx = x + dx[pass_[i]]
    ny = y + dy[pass_[i]]
    
    if nx < 0 or nx >= n or ny < 0 or ny >= m:
        continue
        
    dice = dice_roll(pass_[i], dice)
    
    print(dice[5])
    
    if graph[nx][ny] == 0:
        graph[nx][ny] = dice[0]
    else:
        dice[0] = graph[nx][ny]
        graph[nx][ny] = 0
    
    x,y = nx,ny
    

0개의 댓글