[백준 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

 

* 틀린 부분이나 더 나은 방법이 있을 수 있습니다. 지적해주시면 감사하겠습니다!!

+ Recent posts