알고리즘
[백준] 14499번: 주사위 굴리기
초코비23
2022. 4. 30. 23:50
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])