ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준_14499_주사위 굴리기(python)
    Algorithm/백준_생각정리 2023. 5. 2. 13:24

    ★ 접근법

     그래프의 크기, 명령의 개수 입력들의 최대 사이즈가 크지 않았기 때문에 단순 구현으로 접근했다.

    ★ 풀이법

    (좌표의 이동과 그래프의 범위를 벗어나는 것을 계산하는 것은 단순했기 때문에 메인인 주사위 굴리는 것에 초점을 뒀다)

    1. 주사위 리스트를 만들어놓고 주사위 인덱스에 자신이 생각하는 인덱스별 주사위 면의 위치를 정한다.

    (필자는 밑면, 뒷면, 윗면, 앞면, 왼쪽면, 오른쪽면을 기준으로 했다.)

    2. 주사위를 굴리는 방향 별로 주사위 면의 위치가 바뀌는 것을 구현해준다. 

    - 코드

    n,m,r,c,k = map(int,input().split())
    
    data = []
    
    for i in range(n):
        data.append(list(map(int,input().split())))
    
    command = list(map(int,input().split()))
    
    dx = [0,0,-1,1]
    dy = [1,-1,0,0]
    dice = [0,0,0,0,0,0]
    # 밑면, 뒷면,윗면,앞면,왼쪽면,오른쪽면
    def turn(moving):
        if moving == 1: # 동쪽 # 0-> 4, 1-> 1, 2-> 5, 3-> 3, 4-> 2, 5-> 0
           dice[0],dice[1],dice[2],dice[3],dice[4],dice[5] = dice[5], dice[1], dice[4], dice[3], dice[0], dice[2]              
        elif moving == 2: # 서쪽 # 0->5, 1-> 1, 2-> 4, 3-> 3, 4-> 0, 5-> 2
            dice[0],dice[1],dice[2],dice[3],dice[4],dice[5] = dice[4], dice[1], dice[5], dice[3], dice[2], dice[0]
        elif moving == 3: # 북쪽 # 0->3, 1->0, 2->1 , 3->2, 4->4, 5->5 
            dice[0],dice[1],dice[2],dice[3],dice[4],dice[5] = dice[1], dice[2], dice[3], dice[0], dice[4], dice[5]
        else: # 남쪽 # 0->1, 1->2, 2->3, 3->0, 4->4, 5->5
            dice[0],dice[1],dice[2],dice[3],dice[4],dice[5] = dice[3], dice[0], dice[1], dice[2], dice[4], dice[5]
    
    for moving in command:
        nr = r + dx[moving-1]
        nc = c + dy[moving-1]
        if 0 <= nr < n and 0 <= nc < m:
            turn(moving)
            print(dice[2])
            if data[nr][nc] == 0:
                data[nr][nc] = dice[0]
            else:
                dice[0] = data[nr][nc]
                data[nr][nc] = 0
        else:
            nr -= dx[moving-1]
            nc -= dy[moving-1]
            continue
        r,c = nr,nc

    ★ 회고

    주사위 리스트를 만들어놓고 인덱스별로 면의 위치를 정해줬었다. 그리고 남쪽으로 한 번 굴려서 인덱스가 어떻게 변하는지까지 계산해줬다. 근데 이런 문제에는 특별한 규칙 같은 것이 있을 것이라는 생각에 사로잡혀 인덱스의 위치가 규칙없이 바뀌는 것을 보고 방법이 틀렸구나라고 생각했다. 사로잡히지 않은 것이 중요한 것 같다.

Designed by Tistory.