https://www.acmicpc.net/problem/14499
해결 방법
> 딱히 알고리즘을 사용하는 문제가 아니라 문제이해를 잘하면 되는 문제이다.
> 입력을 받을때 n, m, x, y, k 순으로 입력을 받는데 문제 조건 중에 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1)로 보아 입력을 받는 x, y는 각각 y와 x로 바꾸어 문제를 푸는것이 더 헷갈리지 않는다.
> 나머지는 주사위를 굴릴때 주사위 면이 어떻게 변하는지만 잘 체크하면 된다.
코드
import copy
n,m,y,x,k = map(int,input().split())
board = [list(map(int,input().split())) for i in range(n)]
mission = list(map(int,input().split()))
dice = [0,0,0,0,0,0]
def checkBoard(x,y):
if x >= len(board[0]) or y >= len(board) or x < 0 or y < 0:
return True
else:
return False
def rolldice(dice,i):
tmp_dice = copy.deepcopy(dice)
if i == 1: #동
dice[-1] = tmp_dice[2]
dice[2] = tmp_dice[0]
dice[0] = tmp_dice[3]
dice[3] = tmp_dice[-1]
elif i == 2: #서
dice[-1] = tmp_dice[3]
dice[3] = tmp_dice[0]
dice[0] = tmp_dice[2]
dice[2] = tmp_dice[-1]
elif i == 3: #북
dice[0] = tmp_dice[4]
dice[4] = tmp_dice[-1]
dice[-1] = tmp_dice[1]
dice[1] = tmp_dice[0]
else: #남
dice[0] = tmp_dice[1]
dice[1] = tmp_dice[-1]
dice[-1] = tmp_dice[4]
dice[4] = tmp_dice[0]
dx = [1,-1,0,0]
dy = [0,0,-1,1]
def check(x,y,dice,i):
x += dx[i - 1]
y += dy[i - 1]
if checkBoard(x,y):
x -= dx[i - 1]
y -= dy[i - 1]
return x, y, dice, 0
rolldice(dice,i)
if board[y][x] == 0:
board[y][x] = dice[-1]
else:
dice[-1] = board[y][x]
board[y][x] = 0
return x, y, dice, 1
for i in mission:
if i == 1: #동
x, y, dice, flag = check(x,y,dice,i)
if flag == 1:
print(dice[0])
elif i == 2: #서
x, y, dice, flag = check(x,y,dice,i)
if flag == 1:
print(dice[0])
elif i == 3: #북
x, y, dice, flag = check(x,y,dice,i)
if flag == 1:
print(dice[0])
else: #남
x, y, dice, flag = check(x,y,dice,i)
if flag == 1:
print(dice[0])
'알고리즘' 카테고리의 다른 글
백준_1021_회전하는 큐(시뮬레이션) (0) | 2020.02.26 |
---|---|
백준_3190_뱀(시뮬레이션) (0) | 2020.02.26 |
백준_14503_로봇청소기 (0) | 2020.02.25 |
백준_14503_로봇 청소기(시뮬레이션)(해결 못함) (0) | 2020.02.24 |
Winter-1DAB_시뮬레이션_2020-02-23 (0) | 2020.02.23 |
댓글