백준 온라인 저지 [BOJ]/PYTHON [파이썬]
[백준(BOJ)] 14499번 : 주사위 굴리기 - PYTHON[파이썬]
퉁이리
2021. 11. 7. 03:06
반응형
https://www.acmicpc.net/problem/14499
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 구현
- 시뮬레이션
⊙ 문제 접근 과정
NxM 지도에 번호가 쓰여있다.
두 가지 규칙만 기억하자
- 만약 지도에 있는 값이 0이면 주사위 바닥면의 값을 지도로 복사
- 지도에 있는 값이 0이 아니라면 지도에 있는 값을 주사위 바닥면으로 복사하고 지도는 0으로 초기화
최종적으로 주사위 윗면에 적힌 값을 return
풀이 방법
주사위를 동서남북으로 돌릴 때마다 값을 보전하는 메서드를 간단히 만들어준다.
동서남북을 차례대로 K번 탐색할 때, 해당 값이 범위 안이라면 메서드를 실행.
아니라면 무시.
그리고 위 규칙에 대해 실행.
주사위 윗면 출력
반복
⊙ 문제 풀이
import sys
input = sys.stdin.readline
N, M, x, y, K = map(int, input().split())
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
dice = [0 for _ in range(7)]
arr = [list(map(int, input().split())) for _ in range(N)]
order = list(map(int, input().split()))
def move(direction):
if direction == 1:
dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
elif direction == 2:
dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
elif direction == 3:
dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
elif direction == 4:
dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
for i in order:
nx = x+dx[i-1]
ny = y+dy[i-1]
if not 0 <= nx < N or not 0 <= ny < M:
continue
x, y = nx, ny
move(i)
if arr[x][y]:
dice[1] = arr[x][y]
arr[x][y] = 0
else:
arr[x][y] = dice[1]
print(dice[6])
⊙ 결과
⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형