1. 문제 출처
https://www.acmicpc.net/problem/14499
2. 풀이
주사위를 위, 아래, 나머지로 나누어서 하였다.
여기서 나머지는 바닥 눈금의 동,서,북,남 순 으로 정렬하였으며 이를 이용하여 좀더 편하게 주사위 굴리기를 할 수 있었다..
# 입력
n,m,x,y,k = map(int,input().split())
dice_map = []
for _ in range(n):
dice_map.append(list(map(int, input().split())))
movements = list(map(lambda x: int(x)-1, input().split()))
# 주사위 정보
botton = 1
top = 6
dice_etc = [3,4,2,5]
# 주사위 눈 숫자
dice_num = [0]*6
# 동,서,북,남 이동
dy = [1,-1,0,0]
dx = [0,0,-1,1]
# 주자위를 돌릴 때
def roll_dice(movement,botton,top):
# 새로운 바닥 눈금을 움직인 방향에 존재하는 눈금으로 바꾸어준다,
new_botton = dice_etc[movement]
# 새로운 천장 눈금
new_top = (7-new_botton)
# 천장 눈금의 위치와 원래 바닥이었던 위치를 바꾸어준다.
dice_etc[dice_etc.index(new_top)] = botton
# 움직인 방향의 눈금을 천장이었던 눈금으로 바꾸어준다.
dice_etc[movement] = top
return new_botton,new_top
# 전체적으로 돌리기
def solution(x,y,botton,top):
# 움직임 입력
for movement in movements:
xx = x+dx[movement]
yy = y+dy[movement]
# 맴 안에 존재하면
if (0<=xx<n) and (0<=yy<m):
x = xx
y = yy
botton ,top = roll_dice(movement,botton,top)
# 천장값 출력
print(dice_num[top-1])
if dice_map[x][y]:
dice_num[botton-1] = dice_map[x][y]
dice_map[x][y] = 0
else:
dice_map[x][y] = dice_num[botton-1]
else:
continue
solution(x,y,1,6)
'알고리즘' 카테고리의 다른 글
[Python]1655-백준-가운데를 말해요 (1) | 2024.03.15 |
---|---|
1316-백준-그룹 단어 체커 (0) | 2023.03.30 |
13458-백준-시험 감독 (0) | 2023.03.28 |
14405-백준-피카츄 (0) | 2023.03.20 |
1755-백준-숫자놀이 (0) | 2023.03.17 |