본문 바로가기
Algorithm/파이썬

[Python][구현] 백준 14499번 (주사위 굴리기)

by Joahnee 2022. 3. 29.

요구능력

문제이해 및 구현

문제풀이

코드가 두서없이 복잡하지만 빡구현의 증거이니 이해부탁드립니다..

문제를 이해하고 보면 주사위는 4 * 3의 배열로 이루어져 있다는 것을 알 수 있다.

주사위는 아래와 같은 모양으로 생각하고 풀었다.

주사위의 모양을 계속 이 모양을 유지하면서 풀었는데, 모양을 바꾼다면 엄청 복잡해질것이다.

모양을 유지한다는 것은 주사위가 굴러가더라도 주사위의 아래는 계속해서 dice[3][1]을 유지한것이다.

for문을 통해서 명령을 하나씩 돌리면서,

북쪽으로 이동하면 주사위를 북쪽방향으로 굴리기 때문에 아래 -> 앞 -> 위 -> 뒤로 주사위의 배열순서를 바꿔주었다.

남쪽으로 이동하면 주사위를 남쪽방향으로 굴리기 때문에 뒤 -> 위 -> 앞 -> 아래로 주사위의 배열순서를 바꿔주었다.

남쪽과 북쪽구현하는 것은 비교적 간단한데,

서쪽과 동쪽으로 굴릴 때는 주사위의 구조가 바뀌게된다.

직접 주사위를 그려서 굴려보면 알겠지만, 서쪽으로 굴릴 때 아래와 같이 변한다는 규칙을 발견했다.

가운데 있는 부분과 밑바닥 부분이 서쪽으로 굴릴때는 반시계방향,

동쪽으로 굴릴때는 시계방향으로 변하게된다.

이를 이용해서 문제를 풀었고, 문제의 조건에 따라서 바깥으로 이동하려는 경우는 continue로 처리를 해줬다.

 

후기

푸는데 시간이 오래걸렸다.. 구현 많이 연습해야지

코드

n, m, x, y, k = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
inst = list(map(int, input().split()))
dice = [[0] * 3 for _ in range(4)]

for i in inst:
	#남
    if i == 4:
        if x + 1 >= n:
            continue
        x += 1
        cur = dice[0][1]
        for j in range(1, 4):
            temp = dice[j][1]
            dice[j][1] = cur
            cur = temp
        dice[0][1] = cur
    #북
    if i == 3:
        if x - 1 < 0:
            continue
        cur = dice[3][1]
        for j in range(2, -1, -1):
            temp = dice[j][1]
            dice[j][1] = cur
            cur = temp
        dice[3][1] = cur
        x -= 1
    #서
    if i == 2:
        if y - 1 < 0:
            continue
        y -= 1
        cur = dice[3][1]
        for j in range(2, -1, -1):
            temp = dice[1][j]
            dice[1][j] = cur
            cur = temp
        dice[3][1] = cur
    #동    
    if i == 1:
        if y + 1 >=m:
            continue
        y += 1
        cur = dice[3][1]
        for j in range(0, 3):
            temp = dice[1][j]
            dice[1][j] = cur
            cur = temp
        dice[3][1] = cur
    if arr[x][y] == 0:
        arr[x][y] = dice[3][1]
    else:
        dice[3][1] = arr[x][y]
        arr[x][y] = 0
    print(dice[1][1])

'Algorithm > 파이썬' 카테고리의 다른 글

[Python][구현] 백준 14890번 (경사로)  (0) 2022.03.30
[Python] 백준 2884번 (알람 시계)  (0) 2022.02.05

댓글