[Python] 백준 14499: 주사위 굴리기

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

 

14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

www.acmicpc.net

ANS

diceidx = [0]*6
direc = [(0,1),(0,-1),(-1,0),(1,0)]

def dice(dir):
    a,b,c,d,e,f =diceidx[0],diceidx[1],diceidx[2],diceidx[3],diceidx[4],diceidx[5]
    if dir == 1: #동
        diceidx[0],diceidx[1],diceidx[2],diceidx[3],diceidx[4],diceidx[5] = d,b,a,f,e,c
    if dir == 2: #서
        diceidx[0],diceidx[1],diceidx[2],diceidx[3],diceidx[4],diceidx[5] = c,b,f,a,e,d
    if dir == 3: #북
        diceidx[0],diceidx[1],diceidx[2],diceidx[3],diceidx[4],diceidx[5] = e,a,c,d,f,b
    if dir == 4:
        diceidx[0],diceidx[1],diceidx[2],diceidx[3],diceidx[4],diceidx[5] = b,f,c,d,a,e


N,M,x,y,K = map(int, input().split())
map_list = [list(map(int, input().split())) for _ in range(N)]
prompts = list(map(int,input().split()))
nx = x
ny = y

for prompt in prompts:
    nx += direc[prompt-1][0]
    ny += direc[prompt-1][1]
    if 0>nx or N<=nx or 0>ny or M<=ny: #해당 명령 무시와 출력 무시 코드
        nx -= direc[prompt-1][0]
        ny -= direc[prompt-1][1] #이전으로 되돌려주기
        continue
    dice(prompt)
    if map_list[nx][ny] == 0:
        map_list[nx][ny] = diceidx[-1]
    else: #이동하는 칸이 0이 아닌 경우
        diceidx[-1] = map_list[nx][ny]
        map_list[nx][ny] = 0
    print(diceidx[0])

주사위를 0부터 6까지 만들어놓은 후(diceidx 리스트) 방향에 따라 회전시키는 함수를 구현했다.(dice 함수)

for 문을 돌면서 조건에 따라 지도나 주사위 값을 바꿔준 후 한 번 돌 때마다 주사위 윗면을 출력했다.

헤멘 부분은... dice 함수 구현할 때 어떻게 주사위를 구현할 수 있을지... 그리고 if문에서 소소하게 헤멨다.

TAGS.

Comments