ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 14499번 주사위 굴리기
    알고리즘 2023. 4. 29. 10:26
    728x90
    반응형
    SMALL

    문제 설명

    이번 문제는 주사위의 전개도가 주어지고, 주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때마다 상단에 쓰여있는 값을 구하는 문제입니다.

    • 지도의 각 칸에는 정수가 하나씩 쓰여 있습니다.
    • 주사위를 굴렸을 때, 이동하는 칸에 쓰여 있는 수가 0이면 주사위의 바닥면에 쓰여 있는 수가 칸에 복사됩니다.
    • 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 됩니다.
    • 주사위는 지도 바깥으로 이동시킬 수 없습니다. 만약 바깥으로 이동하려고하면 해당 명령을 무시해야하고, 출력도 하면 안 됩니다.

     

    문제 풀이

    아이디어

    주사위 면

    하늘을 바라보고 있는 면(0)동서남북(1,2,3,4)를 향하고 있는 면, 바닥에 닿는 면(5) 총 6개의 면이 존재합니다. 각 면에 인덱스를 붙여줍니다.

     

    주사위 굴리기

    이번 문제의 경우 주사위가 구르는 방향에 따라 각 면에 있는 숫자들이 이동하게 됩니다.

    이동하는 방향(동서남북)에 따라 각 주사위 면이 이동하는 면을 모두 살펴봅니다.

     

    동쪽으로 이동할 경우

    • 하늘(0)은 동쪽(1)로 이동합니다.
    • 동쪽(1)은 바닥(5)로 이동합니다.
    • 서쪽(2)은 하늘(0)로 이동합니다.
    • 바닥(5)은 서쪽(2)로 이동합니다.

    서쪽으로 이동할 경우

    • 하늘(0)은 서쪽(2)로 이동합니다.
    • 동쪽(1)은 하늘(0)로 이동합니다.
    • ...

    주사위가 이동할 때마다 위와 같은 방식으로 면이 움직이게 됩니다.

    주사위가 이동할 때마다 면의 숫자들을 새로운 면의 숫자로 바꿔주면 됩니다.

     

    풀이

    이동 시 새로운 면에 숫자 주입

    이동할 때마다 주사위의 각 면의 숫자를 바꿔주면 됩니다.

    def roll(dice,direction):
        if direction==1:
            dice[0],dice[1],dice[2],dice[5]=dice[1],dice[5],dice[0],dice[2]
        elif direction==2:
            dice[0],dice[1],dice[2],dice[5]=dice[2],dice[0],dice[5],dice[1]
        elif direction==3:
            dice[0],dice[3],dice[4],dice[5]=dice[3],dice[5],dice[0],dice[4]
        else:
            dice[0],dice[3],dice[4],dice[5]=dice[4],dice[0],dice[5],dice[3]
        return dice

    direction은 1:동쪽, 2:서쪽, 3:북쪽, 4:남쪽 입니다.

    이전 면에 해당하는 숫자를 새로운 면에 대입해주는 것을 알 수 있습니다.

     

    주사위 이동

    주사위가 이동할 때, 바깥으로 나간다면 이동 명령을 따르지도 않고, 출력도 하지 않습니다.

    주사위가 나가지 않는다면 주어진 방향대로 이동시키고, 주사위면의 숫자들도 이동한 면에 대입해줍니다. 그 다음, 하늘을 바라보는 면의 숫자를 출력해줍니다.

     

     

    해결

    이번 문제는 구현 문제로, 차근차근 풀어냈던 것 같습니다.

     

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

     

    14499번: 주사위 굴리기

    첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

    www.acmicpc.net

    코드 링크 : https://github.com/beomseok37/baekjoon/blob/master/new!/14499.py

    반응형
    LIST

    '알고리즘' 카테고리의 다른 글

    백준 7576번 토마토  (2) 2023.06.26
    백준 2252번 줄 세우기  (0) 2023.04.30
    백준 10021번 Watering the Fields  (0) 2023.04.14
    백준 3190번 뱀  (4) 2023.04.13
    백준 13460 구슬 탈출 2  (0) 2023.04.12

    댓글

Designed by Tistory.