DevYoon

[백준] 14499. 주사위 굴리기 (Python) 본문

PS/Baekjoon

[백준] 14499. 주사위 굴리기 (Python)

gimewn 2022. 7. 19. 18:56

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

 

14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

www.acmicpc.net

 

✏️ 단순 구현 문제!

✏️ 주사위를 굴렸을 때 어떻게 변화하는지만 찾으면 금방 해결할 수 있는 문제였다.

 

 

def change(dir): # 주사위 굴렸을 때의 위치 변화
    if dir == 1:
        dice[0], dice[2], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[2]
    elif dir == 2:
        dice[0], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[0], dice[3]
    elif dir == 3:
        dice[0], dice[1], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[1]
    elif dir == 4:
        dice[0], dice[1], dice[4], dice[5] = dice[1], dice[5], dice[0], dice[4]

dice = [0]*6 # 주사위 6칸
N, M, X, Y, K = map(int, input().split())
board = []
dir = [(0, 0), (0, 1), (0, -1), (-1, 0), (1, 0)] # 1~4까지 차례로 동 서 북 남 이동

for _ in range(N):
    board.append(list(map(int, input().split())))

roll = list(map(int, input().split()))

for r in roll:
    dx, dy = X+dir[r][0], Y+dir[r][1] # X와 Y를 움직여 보고
    if 0 <= dx < N and 0 <= dy < M: # 범위 내이면
        change(r) # 주사위 칸 위치 바꿔주고
        if board[dx][dy] == 0: # 만약 움직인 곳의 숫자가 0이면
            board[dx][dy] = dice[5] # 주사위 아래 칸의 숫자를 복사
        else: # 아니면
            dice[5] = board[dx][dy] # 주사위 아래 칸의 숫자를 움직인 곳의 숫자로 변경하고
            board[dx][dy] = 0 # 움직인 곳을 0으로 변경
        print(dice[0]) # 주사위 윗칸 프린트
        X, Y = dx, dy # X, Y 를 움직인 곳으로 변경