문제 링크 : https://www.acmicpc.net/problem/14499
시뮬레이션 문제. 주사위를 굴렸을 때 면들의 위치가 뒤바뀌는 것을 어떻게 구현하느냐가 관건이었다. 먼저 전개도에서 봤을 때 마주보는 면의 인덱스 합은 7이라는 것을 파악해야 했다. 주사위를 동, 서, 남, 북으로 굴리는 것을 어떻게 코딩으로 구현해야 하나 고민하다 꽤 마음에 드는 풀이를 생각했다.
주사위의 윗면 (top) , 동쪽면 (east), 남쪽면 (south) 3개만 항상 파악해주면 건너편은 7 - index 로 구할 수 있다.
앞으로도 주사위 관련 문제가 나오면, 3개의 면을 다루면서 풀면 될 것 같다.
import sys N, M, x, y, K = map(int, sys.stdin.readline().split()) graph = [] for i in range(N): graph.append(list(map(int, sys.stdin.readline().split()))) cmd = list(map(int, sys.stdin.readline().split())) dice = [-1, 0, 0, 0, 0, 0, 0] # default, 1~6 top = 1 east = 3 south = 5 direction = [(0, 0), (0, 1), (0, -1), (-1, 0), (1, 0)] # default, 동, 서, 북, 남 for c in cmd: nx = x + direction[c][0] ny = y + direction[c][1] # 맵 안의 범위에서. if 0 <= nx < N and 0 <= ny < M: # 굴러간다 t, e, s = top, east, south # 동 if c == 1: top = 7 - e east = t south = s # 서 elif c == 2: top = e east = 7 - t south = s # 북 elif c == 3: top = s east = e south = 7 - t # 남 elif c == 4: top = 7 - s east = e south = t bottom = 7 - top # 이동한 칸이 0 이면 if graph[nx][ny] == 0: graph[nx][ny] = dice[bottom] # 이동한 칸이 0이 아니면 else: dice[bottom] = graph[nx][ny] graph[nx][ny] = 0 x = nx y = ny print(dice[top]) # 바깥으로 나갈 경우 else: continue