白駿14499号サイコロ投げ
12098 ワード
白駿14499号サイコロ投げ
https://www.acmicpc.net/problem/14499
Pythonコード
import sys
N, M, y, x, K = map(int, sys.stdin.readline().split())
board = []
for i in range(N):
board.append(list(map(int, sys.stdin.readline().split())))
order_list = list(map(int, sys.stdin.readline().split()))
dice = [0, 0, 0, 0, 0, 0]
dy = [0, 0, -1, 1]
dx = [1, -1, 0, 0]
for order in order_list:
new_y = y + dy[order-1]
new_x = x + dx[order-1]
if new_y <0 or new_y>= N or new_x <0 or new_x >= M:
continue
y = new_y
x = new_x
if order == 1:
dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
elif order == 2:
dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
elif order == 3:
dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]
else:
dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
if board[y][x] == 0:
board[y][x] = dice[5]
else:
dice[5] = board[y][x]
board[y][x] = 0
print(dice[0])
問題を解く
この問題はサイコロの東西南北を混同しなければ解決しやすい.
南東北西方向にスクロールするたびに、方向と数字が変わります.
サイコロを転がすたびに、サイコロに格納されている数字の方向を考えていたので、再格納方式を使いました.
注意事項
問題が開始されると、サイコロの開始座標が渡されます.
このとき座標は(i,v)の形で遷移し,iはyまたはrowを受け入れなければならない.
コードするときは当たり前だけど…問題から入力に移るのも気を使って符号化できなかったので、もっと時間がかかりました.
もっと問題をよく理解して続けます!!
Reference
この問題について(白駿14499号サイコロ投げ), 我々は、より多くの情報をここで見つけました https://velog.io/@yh20studio/백준-14499번-주사위-굴리기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol