소스코드
# 입력받기
import sys
input = sys.stdin.readline
N,M,x,y,cmd = map(int,input().split())
board = []
for _ in range (N):
board.append(list(map(int,input().split())))
direct = list(map(int,input().split()))
# 1:동 2:서 3:북 4:남
dx = [0,0,0,-1,1]
dy = [0,1,-1,0,0]
# 상, 우, 앞
urf = [1,3,5]
dice = [0] * 7
def new_urf(direction, urf):
u,r,f = urf[0],urf[1],urf[2]
if direction == 1:
urf = [7-r,u,f]
elif direction == 2:
urf = [r,7-u,f]
elif direction == 3:
urf = [f,r,7-u]
elif direction == 4:
urf = [7-f,r,u]
return urf
for i in direct:
x,y = x+dx[i], y+dy[i]
# 범위 밖으로 넘어가면 무시
if x < 0 or x >= N or y < 0 or y >= M :
x,y = x-dx[i], y-dy[i]
continue
# 현재 구른 상태의 주사위
urf = new_urf(i,urf)
# board가 0이면 주사위 밑면에 있는 숫자가 복사 board[x][y] = dice[7-urf[0]]
if board[x][y]==0:
board[x][y] = dice[7-urf[0]]
print(dice[urf[0]])
# board가 0이 아니면 dice[7-urf[0]] = board[x][y] 고 board[x][y] = 0이 됨
else:
dice[7-urf[0]] = board[x][y]
board[x][y] = 0
print(dice[urf[0]])
설명
문제를 풀고자하는 생각은 다음과 같습니다.
- 범위 밖이면 무시하자
- 현재 주사위의 상태를 저장하자
- 주사위 밑면에 따른 조건을 반영하자
주사위가 움직이는데 어후 머리로 상상하면서 푸려고 하니 머리가 아프더라구요 :(
그래서 맨위, 맨오른쪽, 맨앞을 기준으로 갱신해나갔습니다. (up, right, front)
그리고 방향에 따라 주사위 자체를 이동시킵니다. (dx, dy)
그러다보면 끝입니다.
생각보다 쉬운 문제였어요 :)
'Coding test' 카테고리의 다른 글
99클럽 코테 스터디 2일차 TIL, 프로그래머스/숫자 카드 나누기도움말 (2) | 2024.07.23 |
---|---|
99클럽 코테 스터디 1일차 TIL, 프로그래머스 / 뒤에 있는 큰수 (3) | 2024.07.22 |
sort(), sorted() 실행 시간 in 백준 (0) | 2024.03.19 |
[프로그래머스/파이썬/가장 큰 정사각형 구하기] (0) | 2024.03.09 |
[프로그래머스/Lv.1/파이썬] 비밀지도 (0) | 2024.03.08 |