본문 바로가기
Coding Test/BOJ

[백준] 14499 - 주사위 굴리기 [Python(파이썬)]

'삼성 SW 역량 테스트' 기출 문제 입니다. 😀

문제 👉 14499번: 주사위 굴리기

1. 문제

  1. 크기가 N*M인 지도와 북쪽으로 r만큼, 서쪽으로 c만큼 떨어진 (r,c) 위치에 주사위가 존재한다.
  2. 지도의 각 칸에는 정수가 하나씩 쓰여져 있다.
  3. 초기 주사위는 모든 면이 0이다.
  4. 주사위를 굴렸을 때
    1. 지도의 바닥면 == 0: 지도의 바닥면 = 주사위의 바닥면
    2. 지도의 바닥면 != 0: 주사위의 바닥면 = 지도의 바닥면
  5. 주사위의 명령은 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다.
  6. 주사위를 이동할 때 마다 주사위의 윗 면에 쓰여진 수를 출력한다.

2. 풀이

시뮬레이션을 이용한 문제 풀이

  1. 주사위가 돌아가는 함수 구현한다.
    (손으로 그려보면서 하면 금방 할 수 있다. 머리로만 하지말자...)

3. 코드

def solution():
    N, M, x, y, K = map(int, input().split())
    B = [list(map(int, input().split())) for _ in range(N)] # 지도
    C = list( input().split())                              # 명령
    D = {'1':(0,1), '2':(0,-1), '3':(-1,0), '4':(1,0)} # 동서북남
    Dice = [0]*6    # 0:하(-z), 1:상(+z), 2:동(+x), 3:서(-x), 4:남(-y), 5:북(y)

    def rotate(r): #주사위 돌아가는 함수
        if r == '1':    # 동
            Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[2],Dice[3],Dice[1],Dice[0],Dice[4],Dice[5]
        if r == '2':    # 서
            Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[3],Dice[2],Dice[0],Dice[1],Dice[4],Dice[5]
        if r == '3':    # 북
            Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[5],Dice[4],Dice[2],Dice[3],Dice[0],Dice[1]
        if r == '4':    # 남
            Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[4],Dice[5],Dice[2],Dice[3],Dice[1],Dice[0]

    for i in range(K):
        x += D[C[i]][0]
        y += D[C[i]][1]

        if x < 0 or x >= N or y < 0 or y >= M:
            x -= D[C[i]][0]
            y -= D[C[i]][1]
            continue

        rotate(C[i])  

        if B[x][y] == 0:
            B[x][y] = Dice[0]
        else:
            Dice[0] = B[x][y]
            B[x][y] = 0

        print(Dice[1])

    return

solution()
  • 결과는 72 ms 나왔다.

References

  •  

🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글