14499 주사위굴리기
업데이트:
1. 문제
문제는 링크에 들어가면 있다.
2. 정답 코드
문제의 내 정답 코드는 다음과 같다.
import copy
from collections import deque
import sys
read = sys.stdin.readline
def dice_move(dice,d):
if d == 1 : # 동
temp = dice[1]
t = temp.pop()
temp = [dice[3]] + temp
dice[1] = temp
dice[3] = t
elif d == 2 : # 서
temp = dice[1]
t = temp.pop(0)
temp.append(dice[3])
dice[1] = temp
dice[3] = t
elif d == 3 : # 북
t = dice[0]
dice[0] = dice[1][1]
dice[1][1] = dice[2]
dice[2] = dice[3]
dice[3] = t
elif d == 4 : # 남
t = dice[3]
dice[3] = dice[2]
dice[2] = dice[1][1]
dice[1][1] = dice[0]
dice[0] = t
return dice
N,M,y,x,K = map(int,read().split())
graph = [[0 for _ in range(M)] for _ in range(N)]
for n in range(N):
temp = list(map(int,read().split()))
graph[n] = temp
# 동 서 북 남
dx = [0,1,-1,0,0]
dy = [0,0,0,-1,1]
direct_list = list(map(int,read().split()))
dice = [0,[0,0,0],0,0]
results = []
for d in direct_list:
# 주사위가 갈 곳의 위치
ny = y + dy[d]
nx = x + dx[d]
if 0<=nx<M and 0<=ny<N :
# 주사위를 굴린다
dice = dice_move(dice,d)
# 바닥이 0 이면
if graph[ny][nx] == 0 :
# 주사위의 수를 복사해서 넣자
graph[ny][nx] = dice[3]
# 0이 아니면
else :
# 바닥의 수를 주사위에 넣고 바닥을 0으로 만들자
dice[3] = copy.deepcopy(graph[ny][nx])
graph[ny][nx] = 0
y = ny
x = nx
print(dice[1][1])
# results.append(dice[1][1])
# else :
# print("h")
# results.append(-1)
# continue
3. 문제 풀이
와 1시간동안 다 풀었고 반례도 예제도 다 맞지만 채점을 하면 계속 시작하자마자 계속 틀리다고 떴었다. 왜 그런지 이유를 몰랐는데.. 중간에 코드 하나를 잘못 썼다.. 아니 그럼 예제에서 틀려야되는거 아닌가..? 왜 맞게나오냐고..
이 문제는 주사위를 굴릴때 값이 바뀌는 모습을 따로 함수화 하는게 중요하다고 생각한다. 나는 문제의 주사위 전개도를 list로 만들어서 주사위를 굴릴때마다 모습을 바꿔주었다.
그 외에는 딱히 특별할게 없다.