본문 바로가기
Data Science/삼성 SW역량테스트 기출 (백준 문제집)

[SW 역량테스트 기출][파이썬] 14499번 주사위 굴리기

by titaniumm 2020. 5. 2.

삼성 역테 문제 테트로미노(?) 랑 유사한 부분이 있다.

삼성역테는 많은 경우의 수를 직접 해야하지만, 그것을 좌표화 시켜서 빠르게 처리하는 능력을 보는 문제들 있는거 같다.

주사위 굴리기 문제도 처음에 접근했을떄 그 상황마다 모두 고려하며 코드를 짜려고 했다.

하지만 그렇게 되면, 코드가 더러울 뿐만 아니라, 하다가 너무 많아서 포기하게 된다.

 

하지만 밑 처럼 다음 이동을 좌표화 시켜서 푼다면 편하다.

다른 문제들에서도 상황상 복잡해 보인다면 좌표화 시키는 것을 활용해보자!

from collections import deque
n,m, x,y,num = map(int,input().split())
map1 = []
for _ in range(n):
    a = list(map(int,input().split()))
    map1.append(a)

gogo = list(map(int,input().split()))
go = deque(gogo)

dice = [0 for i in range(6)]
direction = [0,[4,2,1,6,5,3],[3,2,6,1,5,4],[2,6,3,4,1,5],[5,1,3,4,6,2]]

dx = [0,0,0,-1,1]
dy = [0,1,-1,0,0]
while go:
    d = go.popleft()
    dm = direction[d]
    #방향이동
    if 0<=x+dx[d]<n and 0<= y+dy[d] <m: #map넘어가면 통과
        x =x + dx[d]
        y =y + dy[d]
    else:
        continue
    #주사위 위치 변환
    dice[0],dice[1],dice[2],dice[3],dice[4],dice[5] = dice[dm[0]-1],dice[dm[1]-1],dice[dm[2]-1],dice[dm[3]-1],dice[dm[4]-1],dice[dm[5]-1]
    if map1[x][y] == 0:
        map1[x][y] = dice[0]
    else:
        dice[0] = map1[x][y]
        map1[x][y] =0
    print(dice[5])

댓글