CS/Algorithm 문제

[BaekJoon] 백준 14499번 주사위 굴리기

[BaekJoon] 백준 14499번 주사위 굴리기

 

🎈문제

https://www.acmicpc.net/problem/14499

💬설명

  • 전형적인 삼성의 구현문제
  • 주사위를 굴리는 걸 구현해야 해서 초반에 고민이 필요했다. 푸는건 금방 풀었다.
  • dice 배열과 dice_num 딕셔너리로 주사위의 위치와 방향을 표현해줬다.

👩‍💻코드

# BaekJoon14499.py

N, M, x, y, k = map(int, input().split())
board = [[] for _ in range(N)]
for i in range(N):
    board[i] = list(map(int, input().split()))
operations = list(map(int, input().split()))
dice = [i for i in range(6)]
dice_num = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0}


def move(di):
    global N, M, x, y, board
    rotate = [[2, 5, 3, 0], [3, 5, 2, 0], [1, 5, 4, 0], [4, 5, 1, 0]]
    dx = [0, 0, -1, 1]
    dy = [1, -1, 0, 0]

    # di 동0 서1 북2 남3
    nx = x + dx[di]
    ny = y + dy[di]
    # 보드 밖으로 나가는 경우
    if nx < 0 or ny < 0 or nx >= N or ny >= M:
        return -1
    # 주사위 이동
    first = dice[rotate[di][0]]
    dice[rotate[di][0]] = dice[rotate[di][3]]
    dice[rotate[di][3]] = dice[rotate[di][2]]
    dice[rotate[di][2]] = dice[rotate[di][1]]
    dice[rotate[di][1]] = first
    # 숫자 update
    if board[nx][ny] == 0:
        board[nx][ny] = dice_num[dice[5]]
    else:
        dice_num[dice[5]] = board[nx][ny]
        board[nx][ny] = 0
    # x, y 업데이트
    x = nx
    y = ny

    return dice_num[dice[0]]


def solution():
    global N, M, x, y, k

    for op in operations:
        up = move(op - 1)

        if up == -1:
            continue
        else:
            print(up)


solution()
728x90
반응형

'CS > Algorithm 문제' 카테고리의 다른 글

[BaekJoon] 백준 14501번 퇴사  (0) 2021.10.19
[BaekJoon] 백준 14500번 테트로미노  (0) 2021.10.19
[BaekJoon] 백준 17779번 게리맨더링 2  (0) 2021.10.14
[Programmers] 카펫  (0) 2021.10.14
[Programmers] 소수 찾기  (0) 2021.10.14