https://www.codetree.ai/frequent-problems/cube-rounding-again/description
정육면체를 굴리는 것떄문에
생각할 게 많은 문제.
문제를 풀 때, 정육면체가 어떻게 움직이지는지
그림으로 저는 그려놓고 푸는 편입니다.
dice=[0,1,2,3,4,5,6]
으로 둔 다음에
0은 안쓰니깐 냅두고
1~6까지만 다뤄줍니다.
물론 사람에 따라서는
dice=[1,2,3,4,5,6]
이렇게 두고 푸셔도 되긴하는데
이게 참 헷갈리는 부분이라서
저는 위의 방식으로 푸는 걸 좀 더 추천드리는 편입니다.
그 다음 문제는 그대로 구현해주면 됩니다.
1.주사위 굴리기
-->굴리는 방향이 확정되면 해당 방향대로 정육면체 면 바꿔주기
2. 현재 지점의 숫자 bfs로 점수구하기
3 . 현재지점의 숫자와 아랫면 비교하기
저는 3에서 실수가 좀 있었는데
코드 살펴보다가 바로 파악한 덕분에
헤메는 시간을 줄였습니다.
from collections import deque
dx=[0,1,0,-1]
dy=[1,0,-1,0]
N,M=map(int,input().split())
dice=[0,1,2,3,4,5,6]
room=[list(map(int,input().split())) for _ in range(N)]
sx,sy,sd=0,0,0
answer=0
def c_dir(num,sd):
global dice
if dice[6]>num:
sd=(sd+1)%4
elif dice[6]<num:
sd=(sd-1)%4
return sd
def score(sx,sy):
global answer
now_score=room[sx][sy]
q=deque()
q.append((sx,sy))
mapping=set()
mapping.add((sx,sy))
while q:
x,y=q.popleft()
for d in range(4):
nx=x+dx[d]
ny=y+dy[d]
if nx<0 or nx>=N or ny<0 or ny>=N:
continue
if (nx,ny) in mapping:
continue
if room[nx][ny]==now_score:
mapping.add((nx,ny))
q.append((nx,ny))
answer+=now_score*len(mapping)
def roll_dice(sx,sy,sd):
global dice
nx=sx+dx[sd]
ny=sy+dy[sd]
#범위벗어나면 반대방향으로 굴리기
if nx<0 or nx>=N or ny<0 or ny>=N:
sd=(sd+2)%4
nx = sx + dx[sd]
ny = sy + dy[sd]
#방향대로 바닥 이동
#우로가는 경우
if sd==0:
dice[1],dice[3],dice[6],dice[4]=dice[4],dice[1],dice[3],dice[6]
#아래로 가는 경우
elif sd==1:
dice[1],dice[2],dice[6],dice[5]=dice[5],dice[1],dice[2],dice[6]
#좌로 가는 경우
elif sd==2:
dice[1],dice[4],dice[6],dice[3]=dice[3],dice[1],dice[4],dice[6]
#위로가는 경우
elif sd==3:
dice[1], dice[5], dice[6], dice[2]=dice[2],dice[1],dice[5],dice[6]
return nx,ny,sd
for _ in range(M):
#1. 주사위 굴리기
sx,sy,sd=roll_dice(sx,sy,sd)
# print(dice)
# print(sx,sy,sd)
#2 현재 지점기준 영역
score(sx,sy)
#3. 주시위 방향
sd=c_dir(room[sx][sy],sd)
print(answer)
정육면체 문제가
처음 만나면 상당히 골치아픈 문제 중 하나입니다.
미리미리 정리해주면서
이런 구현에 익숙해지는 걸 추천드립니다.
[삼성sw 5656] 벽돌깨기(파이썬) (0) | 2022.10.10 |
---|---|
[삼성sw 5644번]무선충전(파이썬) (0) | 2022.10.10 |
[백준 1799번] 비숍(파이썬) (0) | 2022.10.08 |
[백준 5427] 불(파이썬) (0) | 2022.10.08 |
[코드트리] 나무박멸(파이썬) -2022 삼성sw 상반기 코테 기출 (0) | 2022.10.07 |
댓글 영역