소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 패캠챌린지
  • 문제
  • 직장인인강
  • 백준
  • 알고리즘
  • 직장인자기계발
  • 패스트캠퍼스
  • 패스트캠퍼스후기
  • 코드스테이츠

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 14499번 : 주사위 굴리기 - Python

2022. 2. 14. 18:34

Gold 4

 

14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

www.acmicpc.net

1시간 조금 넘게 소요

문제를 잘 읽자 ㅡㅡ

 

문제 풀이

구현 문제

바닥을 향하는 면에 적힌 값을 기준으로 각 주사위 면에 적힌 값을 리스트로 표현한다.

순서는 [바닥, 동, 서, 북, 남, 하늘] 이렇게 될 것이다. 

 

주사위를 굴리면 진행 방향의 면이 바닥이 되고 그 반대 면이 하늘을 향하는 면이 된다. 

그리고 원래 바닥을 향하던 면이 진행 방향의 반대방향이 되고, 하늘을 향하던 면이 진행 방향 면이 된다.

진행 방향과 반대방향(북이라면 북과 남)을 제외한 나머지 방향은 변하지 않는다.

말이 굉장히 어려운데 직접 그려가면서,, 확인하였다ㅎ..

 

주사위 움직임의 규칙만 코드로 표현하면 나머지는 문제에서 하란대로 짜주면 된다.

 

코드

from collections import deque
from copy import deepcopy

def dice_move(direction, dice):
    temp = deepcopy(dice)
    pair = [2, 1, 4, 3]

    temp[0] = dice[direction] # 선택한 방향을 바닥으로
    temp[direction] = dice[-1] # 하늘을 선택한 위치로
    temp[-1] = dice[pair[direction-1]] # 선택한 방향의 반대방향을 하늘로
    temp[pair[direction-1]] = dice[0] # 바닥이 선택위치의 반대방향으로
    return temp


n, m, x, y, num = map(int, input().split())

board = []
for _ in range(n):
    board.append(list(map(int, input().split())))

order = deque(list(map(int, input().split())))

dice = [0, 0, 0, 0, 0, 0]
mx = [0, 0, -1, 1]
my = [1, -1, 0, 0]

while order:
    direction = order.popleft()

    nx = mx[direction-1] + x
    ny = my[direction-1] + y

    if 0<=nx<n and 0<=ny<m:
        dice = dice_move(direction, dice)

        # 첫번째 값은 바닥을 뜻함, 바닥이 0이면 값이 복사됨
        if board[nx][ny] == 0:
            board[nx][ny] = dice[0]
        else:
            dice[0] = board[nx][ny]
            board[nx][ny] = 0

        # 하늘 면 출력
        print(dice[-1])

        #좌표 이동
        x, y = nx, ny

 

구글링 해보니 주사위 굴리는 부분은 많은 사람들이 이런 식으로 짜주는 것 같다!

참고,,

def replace_dice(n):
    if n == 1 :
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    elif n == 2:
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    elif n == 3:
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
    else:
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Programmers] 네트워크 - Java  (0) 2022.02.18
[Programmers] 타겟넘버 - Java  (0) 2022.02.17
[Baekjoon] 21610번 : 마법사 상어와 비바라기 - Python  (0) 2022.02.11
[Baekjoon] 14500 : 테트로미노 - Python  (0) 2022.02.10
[Baekjoon] 14891 : 톱니바퀴 - Python  (0) 2022.02.07
    소토
    소토

    티스토리툴바