본문 바로가기

알고리즘

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

 

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

이번 문제 역시 구현이.. 중요한 문제였습니다.

사실상 다이스가 어떻게 굴러가는지를 종이에다가 다 풀어서 동,서,남,북의 경우를 찾으니 나머지 구현은 쉬웠던 문제입니다.

 

 

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

arr = []
for i in range(n):
    arr.append(list(map(int,input().split())))

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

num = [0,0,0,0,0,0,0]

d = 1

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


def moving(n, arr):  # 주사위 변화
    if n == 1:    # 동
        return [0, arr[3], arr[2], arr[6], arr[1], arr[5], arr[4]]
    elif n == 2:  # 서
        return [0, arr[4], arr[2], arr[1], arr[6], arr[5], arr[3]]
    elif n == 3:  # 북
        return [0, arr[2], arr[6], arr[3], arr[4], arr[1], arr[5]]
    elif n == 4:  # 남
        return [0, arr[5], arr[1], arr[3], arr[4], arr[6], arr[2]]


for i in range(k):

    if 0 <= x+dx[move[i]] <= n-1 and 0 <= y+dy[move[i]] <= m-1:

        x += dx[move[i]]
        y += dy[move[i]]
        num = moving(move[i], num)

        if arr[x][y] == 0:
            arr[x][y] = num[6]
        else:
            num[6] = arr[x][y]
            arr[x][y] = 0

        print(num[1])

 

'알고리즘' 카테고리의 다른 글

[백준] 11399번: ATM  (0) 2022.10.18
[Python] 다양한 문자열 입력 방법  (0) 2022.05.03
[백준] 3190번: 뱀  (0) 2022.04.30
[백준] 13460: 구슬 탈출 2  (0) 2022.04.29
[백준] 5014번: 스타트링크  (0) 2022.03.22