업데이트:

카테고리: ,

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로 만들어서 주사위를 굴릴때마다 모습을 바꿔주었다.

그 외에는 딱히 특별할게 없다.

1 분 소요