문제 출처
풀이
- 주사위 배열을 모두 0으로 초기화 한다.
- 각 방향별로 굴렸을때 굴리기 전의 인덱스를 담은 배열을 만든다.
- 순서대로 명령을 실행하며 이동 한 후 지도를 벗어나는 명령은 건너뛴다.
- 다음 주사위의 값을 담은 배열을 생성하고 윗 면의 수를 출력한다.
- 이때 지도의 값이 0이면 주사위 바닥에 복사하고, 0이 아니면 지도에 주사위 바닥의 수를 복사한다.
- 주사위의 위치와 다음 주사위의 배열을 기존 변수에 덮어쓴다.
N, M, y, x, K = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
cmd = input().split()
cube = [0] * 6
direction = {
'1': [0, 5, 1, 2, 4, 3],
'2': [0, 2, 3, 5, 4, 1],
'3': [2, 1, 4, 3, 5, 0],
'4': [5, 1, 0, 3, 2, 4]
}
def move(x, y, d):
nx, ny = x, y
if d == '1':
nx += 1
elif d == '2':
nx -= 1
elif d == '3':
ny -= 1
else:
ny += 1
return nx, ny
for d in cmd:
nx, ny = move(x, y, d)
if nx < 0 or nx >= M or ny < 0 or ny >= N:
continue
nxt_cube = [0] * 6
for i in range(6):
nxt_cube[i] = cube[direction[d][i]]
print(nxt_cube[2])
if arr[ny][nx]:
nxt_cube[5] = arr[ny][nx]
arr[ny][nx] = 0
else:
arr[ny][nx] = nxt_cube[5]
x, y, cube = nx, ny, nxt_cube
'백준' 카테고리의 다른 글
[python] 14502. 연구소 (0) | 2019.07.13 |
---|---|
[python] 14501. 퇴사 (1) | 2019.07.10 |
[python] 2636. 치즈 (0) | 2019.07.04 |
[python] 7576. 토마토 (0) | 2019.07.01 |
[python] 1003. 피보나치 함수 (0) | 2019.06.30 |