For Programmer
백준 14499번 파이썬 문제풀이(주사위 굴리기) 본문
728x90
문제를 이해하느라 30분 걸린거 같다. 조금더 설명이 좋았으면 좋겠다. 나머지 구현은 크게 어렵지는 않으나 전개도를 보고 주사위가 만들어졌을 때 각각의 면에 어떤 숫자가 들어가는지 생각하는 것이 생각보다 쉽지 않다;;
N, M, r, c, K = map(int, input().split())
maps = [list(map(int, input().split())) for i in range(N)]
direct = list(map(int, input().split()))
dice = [0, 0, 0, 0, 0, 0] # 주사위의 각면에 써있는 숫자
dr = [-1, 0, 1, 0] # 상 우 하 좌
dc = [0, 1, 0, -1] # 상 우 하 좌
cur_bottom = 5 # 현재 바닥면
for dir in direct:
if dir == 1: # 동
nr = r + dr[1]
nc = c + dc[1]
if nr < 0 or nr >= N or nc < 0 or nc >= M:
continue
dice[0], dice[2], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[2]
elif dir == 2: # 서
nr = r + dr[3]
nc = c + dc[3]
if nr < 0 or nr >= N or nc < 0 or nc >= M:
continue
dice[0], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[0], dice[3]
elif dir == 3: # 북
nr = r + dr[0]
nc = c + dc[0]
if nr < 0 or nr >= N or nc < 0 or nc >= M:
continue
dice[0], dice[1], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[1]
else: # 남
nr = r + dr[2]
nc = c + dc[2]
if nr < 0 or nr >= N or nc < 0 or nc >= M:
continue
dice[0], dice[1], dice[4], dice[5] = dice[1], dice[5], dice[0], dice[4]
if maps[nr][nc] == 0:
maps[nr][nc] = dice[cur_bottom]
else:
dice[cur_bottom] = maps[nr][nc]
maps[nr][nc] = 0
r, c = nr, nc
print(dice[0])
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 15662번 파이썬 문제풀이(톱니바퀴(2)) (0) | 2022.03.17 |
---|---|
백준 1991번 파이썬 문제풀이(트리 순회) (0) | 2022.03.16 |
SWEA1767 프로세서 연결하기 - 파이썬문제풀이 (0) | 2022.03.14 |
백준 15683번 파이썬 문제풀이(감시) (0) | 2022.03.06 |
백준 2661번 파이썬 문제풀이(좋은수열) (0) | 2022.03.03 |
Comments