728x90
📌 문제
https://www.acmicpc.net/problem/14499
📌 문제 접근 방법
- 입력값을 모두 받은 뒤, 방향을 옮기기 위해 dxy를 만들었다. 인덱스를 4로 나눈 나머지를 쓰려고 남-동-서-북 순서로 리스트에 넣었다.
- dise에는 전개도에 그려진 번호대로 해당 번호에 적힌 숫자를 저장했다.
다만 리스트의 인덱스는 0부터 시작하므로 전개도의 번호에서 1을 뺀 인덱스에 저장된다고 생각하면 된다. - 명령에 따라 주사위를 이동시킨다. 주사위가 범위를 벗어나지 않으면 x, y를 nx, ny로 갱신하고 벗어난다면 continue를 통해 다음 명령으로 넘어가도록 한다.
- 주사위를 이동시킨 후 바닥면을 갱신한다. 이건 직접 전개도를 그려보면서 동서남북 방향으로 어떻게 바뀌는지 체크해서 swap하였다.
- 주사위가 이동한 위치의 값에 따라 주사위 또는 지도의 값을 갱신하고 상단에 쓰여 있는 값을 출력한다.
📌 코드
# 백준 14499 주사위 굴리기
N, M, x, y, K = map(int, input().split())
grid = []
for _ in range(N):
grid.append(list(map(int, input().split())))
cmd = list(map(int, input().split()))
dxy = [(1, 0), (0, 1), (0, -1), (-1, 0)] # 남(4) 동(1) 서(2) 북(3)
dise = [0 for _ in range(6)] # 바닥면 인덱스 : 5
for c in cmd:
# 맵에서 주사위 이동
dx, dy = dxy[c%4]
nx, ny = x+dx, y+dy
if 0 <= nx < N and 0 <= ny < M:
x, y = nx, ny
else:
continue
# 바닥면 갱신
if c == 1: # 동
dise[0], dise[5], dise[3], dise[2] = dise[3], dise[2], dise[5], dise[0]
elif c == 2: # 서
dise[0], dise[5], dise[3], dise[2] = dise[2], dise[3], dise[0], dise[5]
elif c == 3: # 북
dise[1], dise[0], dise[4], dise[5] = dise[0], dise[4], dise[5], dise[1]
elif c == 4: # 남
dise[1], dise[0], dise[4], dise[5] = dise[5], dise[1], dise[0], dise[4]
if grid[x][y]:
dise[5] = grid[x][y]
grid[x][y] = 0
else:
grid[x][y] = dise[5]
print(dise[0])
728x90
'ALGORITHM > BAEKJOON' 카테고리의 다른 글
[BOJ/Python] 2477. 참외밭 (0) | 2022.06.09 |
---|---|
[BOJ/Python] 13460.구슬 탈출 2 (0) | 2022.03.02 |
[BOJ/Python] 21608.상어 초등학교 (0) | 2022.02.27 |
[BOJ/Python] 20055.컨베이어 벨트 위의 로봇 (0) | 2022.02.27 |
[BOJ/Python] 2096. 내려가기 (0) | 2021.12.08 |
댓글