알고리즘/백준
[Python] 백준 14499: 주사위 굴리기
suwonieee
2023. 4. 6. 16:25
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문에서 소소하게 헤멨다.