BAEKJUN 14499 주사위 굴리기

임경현·2023년 4월 4일
0

알고리즘 풀이

목록 보기
9/11

문제 링크: https://www.acmicpc.net/problem/14499


요약: 주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때 마다 상단에 쓰여 있는 값을 구하는 프로그램을 작성


해당 문제의 포인트는 "굴러가는 주사위 값의 변화를 어떻게 나타낼것인가?" 라고 생각한다.
다양한 방법이 있겠지만, 가장 직관적인 방법은 전개도를 기반으로 미리 값의 변화를 정의하는 것이다.

동쪽(1), 서쪽(2), 북쪽(3), 남쪽(4), 각 방향에 따라 값이 어떻게 변하는지 정의한코드이다.

def roll_dice(dice, d):
    if d == 1:
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    elif d == 2:
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    elif d == 3:
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
    elif d == 4:
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]

그 다음은 어렵지 않다.
주어지는 움직임 리스트에 따라서 주사위를 굴려주기만 하면 된다.

그리고 추가 조건인, 값의 복사 처리만 해주면 된다.

보드 값이 0이면 주사위값 복사, 0이 아니면 주사위로 값 복사

이것을 구현한 코드는 다음과 같다.


전체 코드

def roll_dice(dice, d):
    if d == 1:
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    elif d == 2:
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    elif d == 3:
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
    elif d == 4:
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]

def solution():
    dice = [0 for _ in range(7)]

    dx = [0, 0, 0, -1, 1]
    dy = [0, 1, -1, 0, 0]

    N, M, x, y, K = map(int, input().split())
    board = [[0]*M for _ in range(N)]
    for i in range(N):
        board[i] = list(map(int, input().split())) 

    orders = list(map(int, input().split()))

    for order in orders:
        # 1. 이동 좌표 확인
        nx = x + dx[order]
        ny = y + dy[order]

        # 2. 지도 안쪽이면 진행
        if 0 <= nx < N and 0 <= ny < M:
            # 주사위 굴리기
            roll_dice(dice, order)

            # 보드 값이 0이면 주사위값 복사, 0이 아니면 주사위로 값 복사
            if board[nx][ny] == 0:
                board[nx][ny] = dice[6]
            else:
                dice[6] = board[nx][ny]
                board[nx][ny] = 0

            print(dice[1])
            
            x, y = nx, ny
    
def main():
    solution()

if __name__ == '__main__':
    main()
profile
마음을 치유하고 싶은 인공지능 개발자

0개의 댓글