<내 코드>
N, M, x, y, K = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(N)]
op = list(map(int, input().split()))
dice = [0]*7
# 항상 주사위 6번면이 위에 오도록 설정
def move(op):
if op == 1:
dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
elif op == 2:
dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
elif op == 3:
dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
elif op == 4:
dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
# 명령에 따라 지도에서 주사위 이동
def direction(op):
if op == 1:
return (0, 1)
elif op == 2:
return (0, -1)
elif op == 3:
return (-1, 0)
elif op == 4:
return (1, 0)
for i in op:
row, col = direction(i)
if 0 <= x+row < N and 0 <= y+col < M:
x += row
y += col
move(i)
# 해당 지도 좌표의 값이 0인지 판단
if maps[x][y] != 0:
# 바닥면이 지도의 값이 된다
dice[1] = maps[x][y]
maps[x][y] = 0
else:
# 지도의 값이 주사위 바닥면 값이 된다
maps[x][y] = dice[1]
print(dice[6])
특별한 알고리즘이 필요없는 문제다. 구현, 시뮬레이션 문제인데 이런 유형을 많이 풀어보지 않아 쉽지 않았다.
주사위 6번 면이 항상 위로 오도록 규칙을 정해 문제를 그대로 구현하면 되는 문제였다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 14503] 로봇 청소기 - Python (구현, 시뮬레이션) (0) | 2020.09.23 |
---|---|
[백준 14502] 연구소 - Python (브루트포스, BFS) (0) | 2020.09.22 |
[백준 1316] 그룹 단어 체커 - Python (문자열) (0) | 2020.09.10 |
[백준 2941] 크로아티아 알파벳 - Python (문자열) (0) | 2020.09.10 |
[백준 1157]단어 공부 - Python (문자열) (0) | 2020.09.09 |