https://www.acmicpc.net/problem/14499
✅ Solution
- 구현문제로, 주사위를 동서남북 방향으로 굴렸을 때의 모양만 알면 쉽게 풀린다.
- 예를 들어 아래와 같이 초기 값이 있다고 하면
- 맨 위가 1인 주사위를 [1, 2, 3, 4, 5, 6]으로 나타낸다.
- 그리고 서쪽으로 굴렸을 때를 생각해 보면 3이 제일 위로 위치하게 되는 [3, 2, 6, 1, 5, 4]로 나타낼 수 있다.
- 마찬가지로 동쪽은 [4, 2, 1, 6, 5, 3], 북쪽 [5, 1, 3, 4, 6, 2], 남쪽 [2, 6, 3, 4, 1, 5]으로 나타낼 수 있다.
- 그냥 생각하기보다 직접 그려보면 더 명확하게 알 수 있으니 주사위를 그려보는 것을 추천한다.
✅ Code
def turn(direction, x, y):
global dice
# 동쪽
if direction == 1:
dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
# 서쪽
elif direction == 2:
dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
# 북쪽
elif direction == 3:
dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
# 남쪽
else:
dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]
# 지도의 값이 0이면 주사위 바닥에 있는 값 복사
if data[x][y] == 0:
data[x][y] = dice[-1]
# 그렇지 않으면 주사위 바닥에 지도의 값 복사 후, 지도 0 초기화
else:
dice[-1] = data[x][y]
data[x][y] = 0
n, m, x, y, k = map(int, input().split())
data = [list(map(int, input().split())) for _ in range(n)]
cmds = list(map(int, input().split()))
dice = [0] * 6
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
for cmd in cmds:
nx = x + dx[cmd - 1]
ny = y + dy[cmd - 1]
if 0 <= nx < n and 0 <= ny < m:
turn(cmd, nx, ny)
print(dice[0])
x, y = nx, ny
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 20056번 : 마법사 상어와 파이어볼 (Python) (0) | 2023.04.05 |
---|---|
[백준] 21608번: 상어 초등학교 (Python) (2) | 2023.04.05 |
[백준] 17144번: 미세먼지 안녕! (Python) (0) | 2023.03.28 |
[백준] 15685번: 드래곤 커브 (Python) (0) | 2023.03.27 |
[백준] 14891번: 톱니바퀴 (Python) (0) | 2023.03.27 |