728x90
문제 (링크)
https://www.acmicpc.net/problem/14499
나의 풀이
import sys
input = sys.stdin.readline
n, m, x, y, k = map(int, input().split())
graph = []
# 동: 1 서: 2 북: 3 남: 4
moves = [
[],
[0, 1],
[0, -1],
[-1, 0],
[1, 0]
]
# 아래부터 0, 1, 2, 3, 왼쪽 4, 오른쪽 5
# 주사위의 맨 위: dice[0], 맨 아래: dice[2]
dice = [0] * 6
# 주사위 굴리기
def roll_dice(direction):
if direction == 1:
dice[0], dice[2], dice[4], dice[5] = dice[4], dice[5], dice[2], dice[0]
elif direction == 2:
dice[0], dice[2], dice[4], dice[5] = dice[5], dice[4], dice[0], dice[2]
elif direction == 3:
dice[0], dice[1], dice[2], dice[3] = dice[3], dice[0], dice[1], dice[2]
else: # direction == 4
dice[0], dice[1], dice[2], dice[3] = dice[1], dice[2], dice[3], dice[0]
for _ in range(n):
graph.append(list(map(int, input().split())))
commands = list(map(int, input().split()))
for command in commands:
if 0 <= x + moves[command][0] < n and 0 <= y + moves[command][1] < m:
x, y = x + moves[command][0], y + moves[command][1]
roll_dice(command)
if graph[x][y] == 0:
graph[x][y] = dice[2]
else:
dice[2] = graph[x][y]
graph[x][y] = 0
print(dice[0])
코드 설명 및 풀이법
최근 풀었던 구현 문제 중 그나마 난이도가 좀 쉬운 문제였다.
주사위를 굴리는 작업만 잘 처리해주면 큰 문제가 없다.
주사위는 크기가 6짜리 배열을 만들고 그곳에 정보를 저장해주었다.
주사위의 인덱스를 다음과 같이 해서 동, 서, 남, 북으로 굴렸을 때 바뀌는 위치 값을 갱신해줬다.
다른 언어였으면 스와핑하는 과정이 그리 간단하지는 않았겠지만 파이썬은 역시 이런 부분에서 참 편한 것 같다.
주사위를 굴리는 것만 잘 된다면 나머지는 문제에 나와있는대로 잘 구현해주면 된다.
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 1963번 소수 경로 - 파이썬 (Python) (0) | 2021.10.20 |
---|---|
[백준] 14719번 빗물 - 파이썬(Python) (0) | 2021.10.19 |
[백준] 18808번 스티커 붙이기 - 파이썬(Python) (0) | 2021.10.12 |
[백준] 1339번 단어수학 - 파이썬(Python) (1) | 2021.10.07 |
[백준] 2170번 선 긋기 - 파이썬(Python) (0) | 2021.10.05 |