14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도

www.acmicpc.net

 

<내 코드>

 

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번 면이 항상 위로 오도록 규칙을 정해 문제를 그대로 구현하면 되는 문제였다.

반응형

+ Recent posts