📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 14499 주사위 굴리기 문제 풀이

Written by Donghak Park

문제 출처 : 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


문제 해석 : 주사위를 굴리면서 바닥에 숫자가 있으면 복사하고, 없다면 주사위의 숫자를 바닥에 복사한다. 이렇게 명령을 진행할 때 마다 주사위 윗면의 수를 출력하는 문제이다.

 

문제 풀이 : 문제의 조건을 주의하면서 작성한다. 이때 주사위를 굴리는 경우에 따라서 변화하는 방향을 유의하면서 변경해주면 풀이할 수 있다.

 

풀이 시간 (기록용) : 45분

 


풀이 코드

def move_dice(d):
    global dice
    # 동쪽으로
    if d == 0:
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    # 서쪽으로
    elif d == 1:
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    # 북쪽으로
    elif d == 2:
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
    # 남쪽으로
    else:
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]


N, M, x, y, k = map(int, input().split())
dice_map = []

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

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

dice = [0, 0, 0, 0, 0, 0, 0]
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]

now_x, now_y = x, y

for command in commands:
    direct = command - 1

    nx, ny = now_x + dx[direct], now_y + dy[direct]

    if 0 <= nx < N and 0 <= ny < M:
        move_dice(direct)

        if dice_map[nx][ny] == 0:
            dice_map[nx][ny] = dice[1]
        else:
            dice[1] = dice_map[nx][ny]
            dice_map[nx][ny] = 0

        now_x, now_y = nx, ny
        print(dice[6])

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.