구현 - 주사위 굴리기

jisu_log·2025년 4월 6일

알고리즘 문제풀이

목록 보기
14/105

주사위를 동, 서, 남, 북으로 굴릴 때 각 위치의 숫자들이 어디로 이동하는지를 잘 구현해야 함

gets = list(map(int, input().split()))
n = gets[0]
m = gets[1]
x = gets[2]  # 행
y = gets[3]  # 열
k = gets[4]
maps = []
for i in range(0, n):
    line = list(map(int, input().split()))
    maps.append(line)

act_list = list(map(int, input().split()))
dice_nums = [0] * 6


# --------- 주사위 굴리기 함수
def dice(move, dice_nums):
    # 0: back, 1: top, 2: front, 3: bottom, 4: left, 5: right
    if move == 1:  # 동
        temp = dice_nums[1]
        dice_nums[1] = dice_nums[4]
        dice_nums[4] = dice_nums[3]
        dice_nums[3] = dice_nums[5]
        dice_nums[5] = temp

    elif move == 2:  # 서
        temp = dice_nums[1]
        dice_nums[1] = dice_nums[5]
        dice_nums[5] = dice_nums[3]
        dice_nums[3] = dice_nums[4]
        dice_nums[4] = temp

    elif move == 3:  # 남
        temp = dice_nums[1]
        dice_nums[1] = dice_nums[0]
        dice_nums[0] = dice_nums[3]
        dice_nums[3] = dice_nums[2]
        dice_nums[2] = temp

    elif move == 4:  # 북
        temp = dice_nums[1]
        dice_nums[1] = dice_nums[2]
        dice_nums[2] = dice_nums[3]
        dice_nums[3] = dice_nums[0]
        dice_nums[0] = temp

    return dice_nums


# -----------
# 전체 명령 실행하기
for i in range(0, len(act_list)):
    if act_list[i] == 1 and y + 1 < m:  # 동으로 이동
        y = y + 1
    elif act_list[i] == 2 and y - 1 >= 0:  # 서로 이동
        y = y - 1
    elif act_list[i] == 3 and x - 1 >= 0:  # 북 이동
        x = x - 1
    elif act_list[i] == 4 and x + 1 < n:  # 남 이동
        x = x + 1
    else:  # 지도 밖이라 이동 불가하다면
        continue
    # 이동한 좌표로 주사위 굴리기
    dice_nums = dice(act_list[i], dice_nums)

    # ----------   지도 수정 혹은 다이스 번호 수정
    # 이동한 지도에 0이 써있으면 주사위 밑이 복사됨
    if maps[x][y] == 0:
        maps[x][y] = dice_nums[3]
    # 이동한 지도가 0이 아니면 써잇던 숫자가 주사위 바닥으로 복사되고 지도는 0이 됨
    elif maps[x][y] != 0:
        dice_nums[3] = maps[x][y]
        maps[x][y] = 0
    # 주사위가 이동했을 때마다 주사위 top에 쓰여있는 값을 출력
    print(dice_nums[1])

0개의 댓글