반응형
https://www.acmicpc.net/problem/14499
주사위 굴리기 문제
주사위를 굴려서 바닥의 숫자가 0이면 주사위 바닥면의 숫자를 바닥에, 바닥의 숫자가 0이 아니면 주사위 바닥면의 숫자를 바닥의 숫자로 바꾸고 바닥의 숫자를 0으로 바꿔가는 것을 반복했을 때 주사위 상단에 쓰여있는 수를 구하는 문제
조건 나눠서 구현하는 문제였다.
📌 문제 접근 포인트
※ 그림으로 보는 주사위
도면의 전개도의 주사위 형태
1. 주사위를 동쪽으로 굴릴 경우
[1,2,3,4,5,6]의 위치 변경 → [4, 2, 1, 6, 5, 3]
2. 주사위를 서쪽으로 굴릴 경우
[1,2,3,4,5,6]의 위치 변경 → [3, 2, 6, 1, 5, 4]
3. 주사위를 북쪽으로 굴릴 경우
[1,2,3,4,5,6]의 위치 변경 → [5, 1, 3, 4, 6, 2]
4. 주사위를 남쪽으로 굴릴 경우
[1,2,3,4,5,6]의 위치 변경 → [2, 6, 3, 4, 1, 5]
1. 주어진 도면의 주사위를 생각해 보자. 주사위 각 면에 해당하는 위치를 [1, 2, 3, 4, 5, 6]이라고 생각하고 진행해 보자.
2. 각각의 주사위를 굴릴 경우 숫자의 방향은 위의 그림과 같이 바뀌게 된다. 이 점을 고려해서 위치가 바뀔 수 있게 만들어주자
3. 시작 주사위의 경우 각 위치에 해당하는 값이 [0,0,0,0,0,0]이고, 각 값을 받을 때마다 위 2번을 반복할 수 있게 코드를 구성하자
4. 나머지 간단한 조건에 대해서 구현하고 횟수 반복하면 구현 완료.
⚙ 내가 푼 정답코드
# 조건 0 : 맵밖으로 나가면 동작 x
# 조건 1 : 지도위에 윗면 1, 동쪽 3인 상태로 놓여있음
# 조건 2 : 가장 처음 주사위에는 모든 면 0
# 조건 3 : 주사위를 굴렸을 때 이동한 칸에 쓰인 수가 0이면 주사위 바닥면에 있는 수가 칸에 복사
# 조건 4 : 0이 아니면 칸에 쓰인 수가 주사위 바닥면에 복사되면서 칸에 쓰인 수는 0
def roll(move): # 조건 1을 기준으로 굴리기
if move == 1: # 동쪽으로 굴리면
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = dice[3], dice[1], dice[0], dice[5], dice[4], dice[2] # 주사위 변화 4 2 1 6 5 3
elif move == 2: # 서쪽으로 굴리면
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = dice[2], dice[1], dice[5], dice[0], dice[4], dice[3] # 주사위 변화 3 2 6 1 5 4
elif move == 3: # 북쪽으로 굴리면
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = dice[4], dice[0], dice[2], dice[3], dice[5], dice[1] # 주사위 변화 5 1 3 4 6 2
elif move == 4: # 남쪽으로 굴리면
dice[0], dice[1], dice[2], dice[3], dice[4], dice[5] = dice[1], dice[5], dice[2], dice[3], dice[0], dice[4] # 주사위 변화 2 6 3 4 1 5
import sys
N, M, y, x, K = map(int, sys.stdin.readline().split())
board = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
dice_move = list(map(int, sys.stdin.readline().split()))
dice = [0, 0, 0, 0, 0, 0] # 조건 2
dy = [0, 0, -1, 1]
dx = [1, -1, 0, 0]
for i in dice_move:
if 0 <= y + dy[i-1] < N and 0 <= x + dx[i-1] < M: # 조건 0
y = y + dy[i-1]
x = x + dx[i-1]
roll(i)
if board[y][x] == 0: # 조건 3
board[y][x] = dice[5]
else : # 조건 4
dice[5] = board[y][x]
board[y][x] = 0
print(dice[0])
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 13140] Hello World! (python) (0) | 2023.04.25 |
---|---|
[백준 17103] 골드바흐 파티션 (python) (0) | 2023.04.23 |
[백준 4779] 칸토어 집합 (python) (0) | 2023.04.21 |
[백준 12919] A와 B 2 (python) (0) | 2023.04.20 |
[백준 18185] 라면 사기 (Small) (python) (0) | 2023.04.19 |
댓글