728x90
from collections import deque
dx=[0,1,0,-1]
dy=[1,0,-1,0]
def check_out(posX,posY):
if posX < 0 or posX >= n or posY <0 or posY >= n:
return False
return True
def map_point():
for i in range(len(maps)):
for j in range(len(maps)):
if maps[i][j][1] == 0:
startX = i
startY = j
startInt = maps[i][j][0]
stack = deque()
stack.append([startX,startY])
visited = {}
while len(stack) != 0:
checkX,checkY = stack.popleft()
visited[(checkX,checkY)] = 1
for k in range(4):
endX = checkX+dx[k]
endY = checkY+dy[k]
if not check_out(endX,endY):
continue
if (endX,endY) in visited or maps[endX][endY][1] != 0 or maps[endX][endY][0] != startInt:
continue
visited[(endX,endY)] = 1
stack.append([endX,endY])
tCount = len(visited)
for k,_ in visited.items():
maps[k[0]][k[1]][1]=tCount*startInt
def roll():
global dir
global dice_pos
dPosX , dPosY = dice_pos
under_dice = 7-dice[0]
#주사위 밑이랑 격자판 비교해서 방향 선택
if under_dice > maps[dPosX][dPosY][0]:
dir = (dir+1)%4
elif under_dice < maps[dPosX][dPosY][0]:
dir = (dir - 1) % 4
#선택된 방향으로 1회 굴림
n_dPosX = dPosX + dx[dir]
n_dPosY = dPosY + dy[dir]
# 굴린게 밖으로 나갔다면 방향을 바꿔서 굴림
if not check_out(n_dPosX,n_dPosY):
if dir==0:
dir=2
elif dir == 1:
dir=3
elif dir == 2:
dir=0
else:
dir=1
n_dPosX = dPosX + dx[dir]
n_dPosY = dPosY + dy[dir]
dice_pos=[n_dPosX,n_dPosY]
change_dice_status()
roll_checkpoint(n_dPosX,n_dPosY)
def roll_checkpoint(posX,posY):
global answerPoint
answerPoint += maps[posX][posY][1]
def change_dice_status():
global dir
global dice
if dir == 0:
dice = [7-dice[2],dice[1],dice[0]]
elif dir == 1:
dice = [7-dice[1],dice[0],dice[2]]
elif dir == 2:
dice = [dice[2],dice[1],7-dice[0]]
else:
dice = [dice[1],7-dice[0],dice[2]]
n,m = map(int,input().split())
maps = []
for _ in range(n):
maps.append(list(map(int,input().split())))
for i in range(len(maps)):
for j in range(len(maps)):
maps[i][j] = [maps[i][j],0]
map_point()
dice = [4,2,1]
dice_pos = [0,1]
dir = 0 #0,1,2,3 / 우 하 좌 상
answerPoint=maps[0][1][1]
for i in range(m-1):
roll()
print(answerPoint)
생각할 것들
1. 점수 계산 : 변하지 않는 값이므로 사전에 미리 계산해서 넣어주기
2. 주사위 정보 : dice = [맨위, 정면, 오른쪽] 세개의 정보만 저장해서 사용
이외의 것들은 문제에 나와있는 그대로 사용
728x90
'IT 일기 > 코테' 카테고리의 다른 글
2023 상반기 삼성 코테 후기 (0) | 2023.04.09 |
---|---|
이상한 체스 - python (0) | 2023.04.08 |
코드트리 빵 - python (0) | 2023.04.08 |
17070 / 파이프 옮기기 1 파이썬 (0) | 2023.04.07 |
16637번 / 괄호 추가하기 - 파이썬 (0) | 2023.04.06 |