[백준 14499번] 주사위 굴리기 - Python으로 구현하기
문제 접근
- 주사위를 어떻게 자료구조로 표현하고 면 옮기기를 구현할 지가 관건
- 주사위의 각 면을 1~6번으로 부여 한 뒤 주사위가 굴러질 때마다 면을 바꿔주는 방식을 택했다.
생각해볼 점
- 기업 인적성에 나오는 정육면체 전개도 옮기기 구현?
- 면 옮기는데 좀 더 편하고 가독성 좋은 방법?
오답 분석
- 좌표 평면의 x,y와 문제의 x,y가 반대로 되어 있어서 틀린 사람이 많다.
- 항상 문제 꼼꼼히 읽기 주의!
# 1 index, n*m 인 borad
import sys
input = lambda: sys.stdin.readline().rstrip()
n, m, x, y, k = map(int, input().split())
dice=[0]*(6+1)
board = [list(map(int, input().split())) for _ in range(n)] # 맵 정보
opers = list(map(int, input().split())) # 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다.
direc = {1: (0, 1), 2: (0, -1), 3: (-1, 0), 4: (1, 0)}
for oper in opers:
dx,dy=direc.get(oper) # get pos
# move next pos
x+=dx
y+=dy
if 0<=x<n and 0<=y<m: # 다음 좌표 이동가능
# 주사위 면을 교체
if oper==1: # 동쪽
dice[3],dice[1]=dice[1],dice[3]
dice[1],dice[4]=dice[4],dice[1]
dice[4],dice[6]=dice[6],dice[4]
elif oper==2: # 서
dice[4], dice[1] = dice[1], dice[4]
dice[1], dice[3] = dice[3], dice[1]
dice[3], dice[6] = dice[6], dice[3]
elif oper == 3: # 남 : 5 6 2 1
dice[5], dice[1] = dice[1], dice[5]
dice[1], dice[2] = dice[2], dice[1]
dice[2], dice[6] = dice[6], dice[2]
elif oper == 4: # 북
dice[2], dice[1] = dice[1], dice[2]
dice[1], dice[5] = dice[5], dice[1]
dice[5], dice[6] = dice[6], dice[5]
if board[x][y]==0: # 칸이 0 이면 -> 주사위에 있는값이 복사됨
board[x][y]=dice[6]
else: # 주사위 값 교체
dice[6]=board[x][y]
board[x][y]=0
print(dice[1])
else: # 인덱스 오류 -> 해당 명령어 무시, 좌표 원상복귀
x-=dx
y-=dy
* 틀린 부분이나 더 나은 방법이 있을 수 있습니다. 지적해주시면 감사하겠습니다!!
'posts' 카테고리의 다른 글
[백준 14502번] 연구소 - Python으로 구현하기 (0) | 2019.10.17 |
---|---|
[백준 14501번] 퇴사 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 14500번] 테트로미노 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 13458번] 시험 감독 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 3190번] 뱀 - Python 으로 구현하기 (0) | 2019.10.17 |