본문 바로가기
백준

[python] 14499. 주사위 굴리기

by DylanMsK 2019. 7. 8.

문제 출처

14499. 주사위 굴리기

 

풀이

 

  1. 주사위 배열을 모두 0으로 초기화 한다.
  2. 각 방향별로 굴렸을때 굴리기 전의 인덱스를 담은 배열을 만든다.
  3. 순서대로 명령을 실행하며 이동 한 후 지도를 벗어나는 명령은 건너뛴다.
  4. 다음 주사위의 값을 담은 배열을 생성하고 윗 면의 수를 출력한다.
  5. 이때 지도의 값이 0이면 주사위 바닥에 복사하고, 0이 아니면 지도에 주사위 바닥의 수를 복사한다.
  6. 주사위의 위치와 다음 주사위의 배열을 기존 변수에 덮어쓴다.

 


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