백준 14499번 주사위 굴리기

tiki·2021년 5월 24일
0

백준

목록 보기
12/30

백준 14499번 주사위 굴리기

https://www.acmicpc.net/problem/14499

파이썬 코드

import sys

N, M, y, x, K  = map(int, sys.stdin.readline().split())

board = []

for i in range(N):
  board.append(list(map(int, sys.stdin.readline().split())))

order_list = list(map(int, sys.stdin.readline().split()))

dice = [0, 0, 0, 0, 0, 0]

dy = [0, 0, -1, 1]
dx = [1, -1, 0, 0]

for order in order_list:
  new_y = y + dy[order-1]
  new_x = x + dx[order-1]
  if new_y <0 or new_y>= N or new_x <0 or new_x >= M:
    continue

  y = new_y
  x = new_x

  if order == 1:
    dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
  elif order == 2:
    dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
  elif order == 3:
    dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]
  else:
    dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
  
  if board[y][x] == 0:
    board[y][x] = dice[5]
  else:
    dice[5] = board[y][x]
    board[y][x] = 0

  print(dice[0])

문제 풀이

이 문제는 주사위의 동서남북 방향에 대한 것만 헷갈리지 않으면 쉽게 풀 수 있습니다.

주사위가 동서남북 방향에 따라서 굴려질때마다 방향 및 각각의 숫자가 바뀌기 때문에 주의해야합니다.

저는 주사위가 굴러갈때마다 주사위에 저장된 숫자를 방향을 고려하여 다시 저장하는 방식을 사용했습니다.

주의사항

문제 시작에서 주사위의 시작 좌표를 넘겨주는데

이때 좌표가 (i, v) 형태로 넘어오는데 이때 i를 y 혹은 row 로 받아야한다는 점입니다.

코딩하면서는 당연하게 느껴지겠지만... 문제에서 input으로 넘겨주는 것도 신경쓰고 코딩을 못해서 시간이 좀더 소요됐습니다 ㅜㅜ

문제를 더 꼼꼼히 이해하고 문제를 진행하도록 해야겠습니다!!

profile
하루하루 조금씩 발전하려는 개발자 입니다.

0개의 댓글