[백준 14499번] 주사위 굴리기

박형진·2022년 4월 4일
0

https://www.acmicpc.net/problem/14499


1. 코드

import sys

ans = []
n, m, x, y, c = map(int, sys.stdin.readline().rstrip().split())
graph = []
for i in range(n):
    graph.append(list(map(int, sys.stdin.readline().rstrip().split())))
commands = list(map(int, sys.stdin.readline().rstrip().split()))[:]
d = [0] * 7
dx = [0, 0, 0, -1, 1]  # 동쪽[1], 서쪽[2], 북쪽[3], 남쪽[4]
dy = [0, 1, -1, 0, 0]
for i in range(c):
    for j in range(1, 5):
        if commands[i] == j:
            nx = x + dx[j]
            ny = y + dy[j]
            if 0 <= nx < n and 0 <= ny < m:
                t1, t2 = d[1], d[2]
                t3, t4 = d[3], d[4]
                t5, t6 = d[5], d[6]
                if j == 1:
                    d[1], d[2] = t3, t4
                    d[3], d[4] = t2, t1
                elif j == 2:
                    d[1], d[2] = t4, t3
                    d[3], d[4] = t1, t2
                elif j == 3:
                    d[1], d[2] = t5, t6
                    d[5], d[6] = t2, t1
                elif j == 4:
                    d[1], d[2] = t6, t5
                    d[5], d[6] = t1, t2
                if graph[nx][ny] == 0:
                    graph[nx][ny] = d[2]
                else:
                    d[2] = graph[nx][ny]
                    graph[nx][ny] = 0
                ans.append(d[1])
                x, y = nx, ny
for i in ans:
    print(i)

2. 후기

# 각 인덱스는 항상 한글로 적힌 면을 나타낸다. 
d[1=윗면], d[2=아랫면], d[3=왼쪽면], d[4=오른쪽면], d[5=앞면], d[6=뒷면]

규칙을 찾을 때는 아래와 같은 방식으로 그림을 그려서 규칙을 찾았다.

  1. 차례대로 d[i] = i 방식으로 임의의 초기값을 넣는다. (다른 면인 것을 식별할 수 있는 값이라면 i가 아닌 다른 값을 넣어도 상관없음)

  2. 동쪽으로 굴린다면 기존의 d[3=왼쪽면]에 해당하는 값이 d[1=윗면]으로 오는 것을 확인할 수 있다.
    -> 동쪽으로 굴리는 경우 d[1] = d[3] 수행

  3. 반복

profile
안녕하세요!

0개의 댓글