14499 - 주사위 굴리기

2022. 7. 26. 09:262022/BaekJoon_삼성 SW 역량 테스트 기출

이번 문제는 해석만 잘 하면 쉽게 풀리는 문제였다...

하지만 처음에 정육면체인 주사위의 움직임을 어떻게 표현하는가에 대한 고민을 많이 해야했다.

이것만 해결되면 쉽게 풀리는 문제...

 

나는 방향에 따른 주사위의 움직임이 아래와 같음을 찾아냈다. 

이를 리스트로 나타낸 후, 각 움직임에 따른 주사위 번호의 위치를 변화시켰다.

 

그리고 문제 해석상의 시행착오를 한번 겪었는데...

문제에서 "주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다." 문구가 있는데, 난 처음에 주사위를 굴려서 지도 밖으로 이동 하는 경우에는 이후 명령인 지도가 0인 경우에는 주사위의 아랫면 수를 복사하고, 0이 아닌 경우 지도상의 숫자를 주사위 아랫면의 수로 옮긴다는 것만 안하면 되는줄 알았다.

하지만 위의 문구는 굴려서 지도 밖으로 나가면 아예 굴리는 명령을 초기화 시킨다는 뜻이었다. 문제를 풀다보면 혼자서 의미를 왜곡해서 푸는 경우가 종종있는데 이런 습관을 버려야할 것 같다... 문제 이해력을 높여야지 ㅠ.ㅠ

#dice = [1, 2, 3, 4, 5, 6]
# 남쪽 : [5, 1, 3, 4, 6, 2]
# 동쪽 : [3, 2, 6, 1, 5, 4]
# 서쪽 : [4, 2, 1, 6, 5, 3]
# 북쪽 : [2, 6, 3, 4, 1, 5]

N, M, x, y, k = map(int, input().split())
graph = []
for _ in range(N):
    graph.append(list(map(int, input().split())))

direction = list(map(int, input().split()))
dice = [0, 0, 0, 0, 0, 0]

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

for d in direction:
    nx = x + dx[d]; ny = y + dy[d]
    if 0<=nx<N and 0<=ny<M:
        # 동쪽
        if d == 1:
            dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
        # 서쪽
        elif d == 2:
            dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
        # 북쪽
        elif d == 3:
            dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]
        # 남쪽
        elif d == 4:
            dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
        if graph[nx][ny] == 0:
            graph[nx][ny] = dice[5]
        else:
            dice[5] = graph[nx][ny] 
            graph[nx][ny] = 0

        x = nx; y = ny
        print(dice[0])

 

 

'2022 > BaekJoon_삼성 SW 역량 테스트 기출' 카테고리의 다른 글

17142 - 연구소3*  (0) 2022.08.16
16235 - 나무재테크  (0) 2022.08.07
17140 - 이차원 배열과 연산  (0) 2022.07.07
17143 - 낚시왕  (0) 2022.06.25
15685 - 드래곤 커브  (0) 2022.06.10