백준14499(파이썬) - 주사위 굴리기
resilient
·2021. 5. 25. 11:27
728x90
반응형
https://www.acmicpc.net/problem/14499
- 이런 문제는 문제를 잘 읽고 앞에서 부터 문제에서 하라는 대로 차근차근 구현해야 하는 문제이다.
- 먼저 주사위를 움직일때 처리를 해주고, 좌표로 봤을 때 범위에 대한 제한이 있으므로 x,y까지 고려해준다.
- 아래는 친구가 풀었던 풀이인데 주사위위치가 변화할 때 함수로 만들어서 접근하였다. 나는 그냥 dice에 갱신해주면서 문제가 풀렸기 때문에 newRect를 만든 이유는 한번 물어봐야겠다.
- nx,ny를 어떻게 쓸지 생각하는게 까다로웠다.
import sys
input = sys.stdin.readline
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
n, m, x, y, k = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
order = list(map(int, input().split()))
dice = [0,0,0,0,0,0]
for i in range(k):
way = order[i] - 1
nx = x + dx[way]
ny = y + dy[way]
if not 0 <= nx < n or not 0 <= ny < m:
continue
if way == 0:
dice[0], dice[2], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[2]
elif way == 1:
dice[0], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[0], dice[3]
elif way == 2:
dice[0], dice[1], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[1]
elif way == 3:
dice[0], dice[1], dice[4], dice[5] = dice[1], dice[5], dice[0], dice[4]
if graph[nx][ny] == 0:
graph[nx][ny] = dice[5]
else:
dice[5] = graph[nx][ny]
graph[nx][ny] = 0
x, y = nx, ny
print(dice[0])
아래는 친구가 작성한 코드이다.
import sys
input = sys.stdin.readline
n, m, x, y, k = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(int, sys.stdin.readline().split())))
dice = [0,0,0,0,0,0]
order = list(map(int, sys.stdin.readline().split()))
def east(dice):
new_dice = [0,0,0,0,0,0]
new_dice[0] = dice[3]
new_dice[1] = dice[1]
new_dice[2] = dice[0]
new_dice[3] = dice[5]
new_dice[4] = dice[4]
new_dice[5] = dice[2]
return new_dice
def west(dice):
new_dice = [0,0,0,0,0,0]
new_dice[0] = dice[2]
new_dice[1] = dice[1]
new_dice[2] = dice[5]
new_dice[3] = dice[0]
new_dice[4] = dice[4]
new_dice[5] = dice[3]
return new_dice
def north(dice):
new_dice = [0,0,0,0,0,0]
new_dice[0] = dice[4]
new_dice[1] = dice[0]
new_dice[2] = dice[2]
new_dice[3] = dice[3]
new_dice[4] = dice[5]
new_dice[5] = dice[1]
return new_dice
def south(dice):
new_dice = [0,0,0,0,0,0]
new_dice[0] = dice[1]
new_dice[1] = dice[5]
new_dice[4] = dice[0]
new_dice[5] = dice[4]
new_dice[2] = dice[2]
new_dice[3] = dice[3]
return new_dice
# k번만큼 명령 수행
for i in order:
if i == 1: # 동쪽
if y+1 < m:
dice = east(dice)
if graph[x][y+1] == 0:
graph[x][y+1] = dice[5]
else:
dice[5] = graph[x][y+1]
graph[x][y+1] = 0
y += 1
print(dice[0])
elif i == 2: # 서쪽
if y-1 >= 0:
dice = west(dice)
if graph[x][y-1] == 0:
graph[x][y-1] = dice[5]
else:
dice[5] = graph[x][y-1]
graph[x][y-1] = 0
y -= 1
print(dice[0])
elif i == 3: # 북쪽
if x-1 >= 0:
dice = north(dice)
if graph[x-1][y] == 0:
graph[x-1][y] = dice[5]
else:
dice[5] = graph[x-1][y]
graph[x-1][y] = 0
x -= 1
print(dice[0])
elif i == 4: # 남쪽
if x+1 < n:
dice = south(dice)
if graph[x+1][y] == 0:
graph[x+1][y] = dice[5]
else:
dice[5] = graph[x+1][y]
graph[x+1][y] = 0
x += 1
print(dice[0])
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준]18111(파이썬) - 마인크래프트 (2) | 2021.05.27 |
---|---|
백준1074(파이썬) - Z (0) | 2021.05.27 |
백분1874(파이썬) - 스택 수열 (0) | 2021.05.24 |
백준1926(파이썬) - 그림 (0) | 2021.05.24 |
백준2468(파이썬) - 안전영역 (0) | 2021.05.23 |