이숭간 공부기록
[백준] 14499번 파이썬 _ 주사위굴리기 (삼성SW) 본문
728x90
https://www.acmicpc.net/problem/status/14499/28/1
문제유형 : 구현
문제풀이 :
- 이동시에 주사위를 바꿔주는것을 구현할 수 있어야한다.
- 동서남북에 따라 좌표이동을 생각해서 미리 구현해놓으면 된다. 다른분들의 풀이도 수동으로 동서남북에 좌표변환을 지정해두었다.
두번째 푸는 문젠데 첫번째때는 아마 못풀어서 답을 보고 풀었던 기억이 있는데 이번에는 바로 풀었다. 실력이 조금씩 늘긴 하나보다! 더 화이팅!
정답코드 :
import sys
input = sys.stdin.readline
graph = []
n, m, x, y, k = map(int, input().split())
for i in range(n):
graph.append(list(map(int, input().split())))
order = list(map(int, input().split()))
# 1,2,3,4 - 동서북남 - 우좌상하
dx = [0, 0, 0, -1, 1]
dy = [0, 1, -1, 0, 0]
dice = [[0] * 3 for _ in range(4)]
def move_south(dice):
new_dice = [[0] * 3 for _ in range(4)]
new_dice[0][1] = dice[3][1]
new_dice[1][1] = dice[0][1]
new_dice[2][1] = dice[1][1]
new_dice[3][1] = dice[2][1]
new_dice[1][0] = dice[1][0]
new_dice[1][2] = dice[1][2]
return new_dice
def move_north(dice):
new_dice = [[0] * 3 for _ in range(4)]
new_dice[0][1] = dice[1][1]
new_dice[1][1] = dice[2][1]
new_dice[2][1] = dice[3][1]
new_dice[3][1] = dice[0][1]
new_dice[1][0] = dice[1][0]
new_dice[1][2] = dice[1][2]
return new_dice
def move_west(dice):
new_dice = [[0] * 3 for _ in range(4)]
new_dice[0][1] = dice[0][1]
new_dice[2][1] = dice[2][1]
new_dice[3][1] = dice[1][0]
new_dice[1][0] = dice[1][1]
new_dice[1][2] = dice[3][1]
new_dice[1][1] = dice[1][2]
return new_dice
def move_east(dice):
new_dice = [[0] * 3 for _ in range(4)]
new_dice[0][1] = dice[0][1]
new_dice[2][1] = dice[2][1]
new_dice[1][1] = dice[1][0]
new_dice[1][2] = dice[1][1]
new_dice[1][0] = dice[3][1]
new_dice[3][1] = dice[1][2]
return new_dice
# 명령의 개수
for i in range(k):
j = order[i]
# 시작점에서 움직인 좌표
moved_x, moved_y = x + dx[j], y + dy[j]
# print(moved_x, moved_y)
# 그래프를 벗어나지 않으면
if 0 <= moved_x < n and 0 <= moved_y < m:
# 주사위를 굴린다.
if j == 1:
dice = move_east(dice)
elif j == 2:
dice = move_west(dice)
elif j == 3:
dice = move_north(dice)
else:
dice = move_south(dice)
# 주사위의 바닥과 그래프의 바닥을 비교한다.
# 바닥이 0이면 주사위의 바닥을 칸에 복사한다.
# 바닥이 0이 아니면 주사위의 바닥을 교체한다.
if graph[moved_x][moved_y] == 0:
graph[moved_x][moved_y] = dice[3][1]
else:
dice[3][1] = graph[moved_x][moved_y]
graph[moved_x][moved_y] = 0
x, y = moved_x, moved_y
print(dice[1][1])
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2458번 파이썬 _ 키 순서 (0) | 2021.08.15 |
---|---|
[백준] 9372번 파이썬 _ 상근이의 여행 (0) | 2021.08.12 |
[백준] 14500번 파이썬 _ 테트로미노 (0) | 2021.08.12 |
[백준] 11657번 파이썬 _ 타임머신 (0) | 2021.08.11 |
[백준] 1715번 파이썬 _ 카드 정렬하기 (0) | 2021.07.25 |