For Programmer

백준 14499번 파이썬 문제풀이(주사위 굴리기) 본문

코팅테스트/백준 문제 모음

백준 14499번 파이썬 문제풀이(주사위 굴리기)

유지광이 2022. 3. 15. 23:17
728x90


 

문제를 이해하느라 30분 걸린거 같다. 조금더 설명이 좋았으면 좋겠다. 나머지 구현은 크게 어렵지는 않으나 전개도를 보고 주사위가 만들어졌을 때 각각의 면에 어떤 숫자가 들어가는지 생각하는 것이 생각보다 쉽지 않다;;

 

N, M, r, c, K = map(int, input().split())
maps = [list(map(int, input().split())) for i in range(N)]
direct = list(map(int, input().split()))

dice = [0, 0, 0, 0, 0, 0]  # 주사위의 각면에 써있는 숫자
dr = [-1, 0, 1, 0]  # 상 우 하 좌
dc = [0, 1, 0, -1]  # 상 우 하 좌

cur_bottom = 5  # 현재 바닥면

for dir in direct:

    if dir == 1:  # 동
        nr = r + dr[1]
        nc = c + dc[1]

        if nr < 0 or nr >= N or nc < 0 or nc >= M:
            continue

        dice[0], dice[2], dice[3], dice[5] = dice[3], dice[0], dice[5], dice[2]

    elif dir == 2:  # 서
        nr = r + dr[3]
        nc = c + dc[3]

        if nr < 0 or nr >= N or nc < 0 or nc >= M:
            continue

        dice[0], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[0], dice[3]

    elif dir == 3:  # 북
        nr = r + dr[0]
        nc = c + dc[0]

        if nr < 0 or nr >= N or nc < 0 or nc >= M:
            continue

        dice[0], dice[1], dice[4], dice[5] = dice[4], dice[0], dice[5], dice[1]

    else:  # 남
        nr = r + dr[2]
        nc = c + dc[2]

        if nr < 0 or nr >= N or nc < 0 or nc >= M:
            continue

        dice[0], dice[1], dice[4], dice[5] = dice[1], dice[5], dice[0], dice[4]

    if maps[nr][nc] == 0:
        maps[nr][nc] = dice[cur_bottom]
    else:
        dice[cur_bottom] = maps[nr][nc]
        maps[nr][nc] = 0

    r, c = nr, nc
    print(dice[0])
728x90
Comments