728x90
https://www.acmicpc.net/problem/14499
# https://www.acmicpc.net/problem/14499
import sys; input = sys.stdin.readline
def rollingDice(d, dice):
# d: rolling direction 1 east, 2 west, 3 north, 4 south
# dice: 1 top, 6 bottom
# return upper position
tmp_dice = dice[:]
if d == 1:
tmp_dice[1] = dice[4]
tmp_dice[3] = dice[1]
tmp_dice[4] = dice[6]
tmp_dice[6] = dice[3]
elif d == 2:
tmp_dice[1] = dice[3]
tmp_dice[3] = dice[6]
tmp_dice[4] = dice[1]
tmp_dice[6] = dice[4]
elif d == 3:
tmp_dice[1] = dice[5]
tmp_dice[2] = dice[1]
tmp_dice[5] = dice[6]
tmp_dice[6] = dice[2]
elif d == 4:
tmp_dice[1] = dice[2]
tmp_dice[2] = dice[6]
tmp_dice[5] = dice[1]
tmp_dice[6] = dice[5]
return tmp_dice
def changeCommand(command):
# 동서남북 -> dx, dy
dx, dy = None, None
if command == 1:
dx, dy = 0, 1
elif command == 2:
dx, dy = 0, -1
elif command == 3:
dx, dy = -1, 0
elif command == 4:
dx, dy = 1, 0
return dx, dy
N, M, x, y, K = map(int, input().split())
_map = [[-1 for _ in range(M + 2)]]
for _ in range(N):
_map.append([-1] + list(map(int, input().split())) + [-1])
_map.append([-1 for _ in range(M + 2)])
command = list(map(int, input().split()))
x += 1
y += 1
dice = [0 for _ in range(7)] # 0 은 사용하지 않고 1~6 까지 사용
upper = 1
lower = 6
for c in command:
dx, dy = changeCommand(c)
if _map[x + dx][y + dy] == -1:
continue
x += dx
y += dy
dice = rollingDice(c, dice)
if _map[x][y]:
dice[6] = _map[x][y]
_map[x][y] = 0
else: # 지도의 값이 0 인 경우
_map[x][y] = dice[6]
print(dice[1])
삼성 a형 기출문제이다. 구현문제인데 주사위 굴리는걸 구현하는것에서 많이 애먹었다.
index로 계속 바꿔가면서 하려고했는데 구현하는데 너무 오래걸려서 타인의 코드를 보았다.
dice에서 1을 윗면, 6을 아랫면으로 고정시켜서 주사위를 굴릴때마다 각 값들을 교환하는 방식으로 구현하면 조금더 쉽게 구현할수 있었다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 18258 큐2 C (0) | 2021.11.29 |
---|---|
[백준] 1987 알파벳 python(pypy), c (0) | 2021.10.26 |
[백준] 9205 맥주 마시면서 걸어가기 (0) | 2021.10.14 |
[백준] 3190 뱀 python (0) | 2021.10.14 |
[백준] 12865 평범한 배낭 python (0) | 2021.10.12 |