코딩 공부

[Python](시뮬) 백준 14499번 : 주사위 굴리기 본문

삼성 SW 역량 테스트 기출 문제

[Python](시뮬) 백준 14499번 : 주사위 굴리기

Algomalgo 2024. 2. 3. 02:11
728x90


<접근 방법>

  1. 삼차원 주사위를 굴린다고 생각하니 너무 어렵게 느껴져 전개도로 접근해봐야겠다.
  2. 동서남북마다 주사위의 상태를 정리하여 전개도를 그려본다.

3. 각 명령의 순서대로 주사위를 이동시키고, 범위에서 벗어나지 않을 경우에만 주사위의 좌표, 전개도를 바꾸고(change 함수 이용) 상황에 맞춰 바닥면 및 주사위면을 복사시키고, 주사위의 윗면을 출력한다.

def change(d):  # 주사위 전개도 변경
    if d == 1:
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    elif d == 2:
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    elif d == 3:
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
    elif d == 4:
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]


N, M, x, y, K = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
order = list(map(int, input().split()))
dice = [0, 0, 0, 0, 0, 0, 0]    # 처음 주사위는 모든 면이 0
directions = {1:(0, 1), 2:(0, -1), 3:(-1, 0), 4:(1, 0)} # 동서북남

for d in order:
    nx = x + directions[d][0]
    ny = y + directions[d][1]
    if 0<=nx<N and 0<=ny<M: # 범위 내에서 이동할 때만 출력함
        x, y = nx, ny
        change(d)
        if board[x][y] == 0:    # 바닥면이 0일 경우
            board[x][y] = dice[6]   # 주사위 숫자를 바닥으로 복사
        else:   # 바닥면이 0이 아닌 경우
            dice[6] = board[x][y]   # 바닥면의 숫자를 주사위면으로 복사
            board[x][y] = 0     # 바닥면은 0으로
        print(dice[1])  # 주사위 윗면 출력

이해가 되지 않는 부분이 있으면 질문 주세요. 감사합니다.

728x90