https://www.acmicpc.net/problem/14499
구현 문제입니다.
우선 문제부터 간단하게 요약하면,
가로가 N, 세로가 M인 지도에서 규칙대로 주사위를 굴릴 때, (지도 밖으로 주사위가 나가는 경우에는 안굴립니다.) 굴리는 것에 성공 한 경우, 주사위의 가장 윗면에 적힌 숫자를 출력하는 것이 문제입니다.
실제로 문제가 조금 기니 한번 읽어보는 것을 추천합니다.
<Solution>
주사위의 전개도를 처음에
2
4 1 3
5
6
과 같이 주었는데 이 그림을 이용해서 간단하게 설명해보면, 1을 윗면이라고 가정하면
1 = Top
2 = up
5 = down
6 = bottom
4 = left
3 = right
라고 주사위에서 정의를 하고, 주사위class를 만들어 굴릴수 있도록 구현하였습니다.
구현 문제이기 때문에 자세한 설명은 생략하고 실제 구현은 아래와 같습니다.
import sys
N, M, x, y, K = list(map(int, sys.stdin.readline().rstrip().split()))
map_ = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(N)]
command = list(map(int, sys.stdin.readline().rstrip().split()))
# 1,2,3,4 -> east, west, north, south
class dice:
def __init__(self):
self.top = 0
self.bottom = 0
self.right = 0
self.left = 0
self.up = 0
self.down = 0
def move_right(self):
right = self.top
bottom = self.right
left = self.bottom
top = self.left
self.right = right
self.bottom = bottom
self.left = left
self.top = top
def move_left(self):
right = self.bottom
bottom = self.left
left = self.top
top = self.right
self.right = right
self.bottom = bottom
self.left = left
self.top = top
def move_up(self):
up = self.top
bottom = self.up
down = self.bottom
top = self.down
self.up = up
self.bottom = bottom
self.down = down
self.top = top
def move_down(self):
down = self.top
bottom = self.down
up = self.bottom
top = self.up
self.up = up
self.bottom = bottom
self.down = down
self.top = top
def dice_command(self, number):
if number == 1:
self.move_right()
if number == 2:
self.move_left()
if number == 3:
self.move_up()
if number == 4:
self.move_down()
mydice = dice()
current = (x,y)
move_r = [0,0,0,-1,1] # None, right, left, up, down
move_c = [0,1,-1,0,0]
def oob(N, M, x, y):
return x<0 or y<0 or x>N-1 or y>M-1
for c in command:
c_r, c_c = current
new_r = c_r + move_r[c]
new_c = c_c + move_c[c]
if not oob(N, M, new_r, new_c):
mydice.dice_command(c)
if map_[new_r][new_c] == 0:
map_[new_r][new_c] = mydice.bottom
else:
mydice.bottom = map_[new_r][new_c]
map_[new_r][new_c] = 0
print(mydice.top)
current = (new_r, new_c)
else:
continue
반응형
'코딩테스트 > Python 문제풀이' 카테고리의 다른 글
[백준] 퇴사 (0) | 2022.07.22 |
---|---|
[백준] 테트로미노 (0) | 2022.07.22 |
[백준] 연산자 끼워넣기 (0) | 2022.07.21 |
[백준] 상어 초등학교 (0) | 2022.07.21 |
[백준] 불 끄기 (0) | 2022.07.20 |