728x90
반응형
https://www.acmicpc.net/problem/14499
문제 해결
- 주사위와 지도에 대해서 이해하기 어려웠다.
- 주사위를 굴린다는것은 오른쪽, 왼쪽, 위쪽, 아래쪽으로 한 칸 굴린다는 것을 이해하면 문제가 쉬워진다.
- 시물레이션 문제이다.
- 한번 굴릴 때 어떻게 지도에서 움직이는지 이해하고 그래서 주사위를 어떻게 굴렸는지 알고 숫자를 변경시키고 주사위 위쪽 숫자를 출력하면 해결된다.
CODE
import sys
input = sys.stdin.readline
def move_right():
temp = dice[1]
dice[1] = dice[0]
dice[0] = dice[4]
dice[4] = dice[5]
dice[5] = temp
def move_left():
temp = dice[4]
dice[4] = dice[0]
dice[0] = dice[1]
dice[1] = dice[5]
dice[5] = temp
def move_front():
temp = dice[3]
dice[3] = dice[0]
dice[0] = dice[2]
dice[2] = dice[5]
dice[5] = temp
def move_back():
temp = dice[5]
dice[5] = dice[2]
dice[2] = dice[0]
dice[0] = dice[3]
dice[3] = temp
def simulate(num):
global x, y
dx = dxs[num - 1]
dy = dys[num - 1]
nx = x + dx
ny = y + dy
if 0 <= nx < n and 0 <= ny < m:
x = nx
y = ny
if num == 1:
move_right()
elif num == 2:
move_left()
elif num == 3:
move_back()
elif num == 4:
move_front()
if board[x][y] == 0:
board[x][y] = dice[0]
else:
dice[0] = board[x][y]
board[x][y] = 0
print(dice[5])
if __name__ == "__main__":
n, m, x, y, k = map(int, input().split())
board = []
dice = [0] * (6) # down, left, front,back,right, up
for _ in range(n):
board.append(list(map(int, input().split())))
dxs = [0, 0, -1, 1] # 동, 서, 북,남
dys = [1, -1, 0, 0]
command = list(map(int, input().split()))
for i in range(k):
simulate(command[i])
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 3954 Brainf**k 인터프리터 (0) | 2023.05.28 |
---|---|
[python] 백준 14891 톱니바퀴 (0) | 2023.05.22 |
[python] 백준 2923 숫자 게임 (0) | 2023.05.16 |
[python] 백준 1736 쓰레기 치우기 (0) | 2023.05.13 |
[python] 백준 19644 좀비 떼가 기관총 진지에도 오다니 (0) | 2023.05.12 |
댓글