[BOJ] 14499 주사위 굴리기 - 삼성SW역량테스트 기출
BOJ 14499 주사위 굴리기
https://www.acmicpc.net/problem/14499
- 주사위 도면도를 가로부분, 세로부분 나눠서 생각
- 위, 아래를 공유함
- 동서남북 방향에 따라 주사위 전개도 업데이트
- 북쪽이면 세로부분 위로밀고 남쪽이면 아래로 밀고
- 동쪽이면 가로부분 오른쪽으로 밀고 서쪽이면 왼쪽으로 밀고
- 세로, 가로 부분 공유하는 위, 아래 부분 서로 같게 업데이트
- 지도가 0일 경우와 아닐 경우 나눠서 지도에 바닥값 복사 or 지도에 있는 값 주사위 바닥에 복사
# BOJ 14499 주사위 굴리기[삼성 SW 역량 테스트 기출] 골드4 - 김수민
from collections import deque
N, M, y, x, K = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(N)]
dy = [0, 0, -1, 1]
dx = [1, -1, 0, 0]
dice_garo = deque([0, 0, 0, 0]) # 주사위 전개도 가로 부분
dice_sero = deque([0, 0, 0, 0]) # 주사위 전개도 세로 부분분Q = deque()
order = list(map(int, input().split()))
top = 0
for k in range(K):
dir = order[k]
ny = y + dy[dir - 1]
nx = x + dx[dir - 1]
if ny < 0 or ny >= N or nx < 0 or nx >= M:
continue
y, x = ny, nx
# 동,서,남,북일 경우 주사위 전개도 변화
if dir == 1:
a = dice_garo.pop()
dice_garo.appendleft(a)
elif dir == 2:
a = dice_garo.popleft()
dice_garo.append(a)
elif dir == 3:
a = dice_sero.popleft()
dice_sero.append(a)
else:
a = dice_sero.pop()
dice_sero.appendleft(a)
# 가로와 세로가 공유하는 주사위 위, 바닥 동기화
if dir == 1 or dir == 2:
top, bottom = dice_garo[1], dice_garo[3]
dice_sero[1], dice_sero[3] = top, bottom
else:
top, bottom = dice_sero[1], dice_sero[3]
dice_garo[1], dice_garo[3] = top, bottom
# 지도가 0일 경우와 0이 아닐 경우
if MAP[ny][nx] == 0:
MAP[ny][nx] = bottom
else:
bottom = MAP[ny][nx]
MAP[ny][nx] = 0
dice_garo[3], dice_sero[3] = bottom, bottom
print(top)
Author And Source
이 문제에 관하여([BOJ] 14499 주사위 굴리기 - 삼성SW역량테스트 기출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@smkim104/BOJ-14499-주사위-굴리기삼성SW역량테스트-기출저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)