ye0nn
영차영차
ye0nn
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • CS (0)
      • 운영체제 (0)
      • 네트워크 (0)
      • 알고리즘 & 자료구조 (0)
    • 코딩테스트 (48)
      • 프로그래머스 (40)
      • 백준 (8)
    • 프로그래밍 (11)
      • 프론트엔드 (3)
      • 자바스크립트 (0)
      • 스위프트 (7)
      • 파이썬 (1)
    • 취준기록 (1)

인기 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
ye0nn

영차영차

[백준] 14499번: 주사위 굴리기 (Python)
코딩테스트/백준

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

2023. 4. 3. 23:26

 

 

 

 

 

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

 

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

 

 

 

 

 

✅ Solution

  • 구현문제로, 주사위를 동서남북 방향으로 굴렸을 때의 모양만 알면 쉽게 풀린다.
  • 예를 들어 아래와 같이 초기 값이 있다고 하면

  • 맨 위가 1인 주사위를 [1, 2, 3, 4, 5, 6]으로 나타낸다. 
  • 그리고 서쪽으로 굴렸을 때를 생각해 보면 3이 제일 위로 위치하게 되는 [3, 2, 6, 1, 5, 4]로 나타낼 수 있다.
  • 마찬가지로 동쪽은 [4, 2, 1, 6, 5, 3], 북쪽 [5, 1, 3, 4, 6, 2], 남쪽 [2, 6, 3, 4, 1, 5]으로 나타낼 수 있다.
  • 그냥 생각하기보다 직접 그려보면 더 명확하게 알 수 있으니 주사위를 그려보는 것을 추천한다. 

 

 

 

 

 

✅ Code

def turn(direction, x, y):
    global dice

    # 동쪽
    if direction == 1:
        dice = [dice[3], dice[1], dice[0], dice[5], dice[4], dice[2]]
    # 서쪽
    elif direction == 2:
        dice = [dice[2], dice[1], dice[5], dice[0], dice[4], dice[3]]
    # 북쪽
    elif direction == 3:
        dice = [dice[4], dice[0], dice[2], dice[3], dice[5], dice[1]]
    # 남쪽
    else:
        dice = [dice[1], dice[5], dice[2], dice[3], dice[0], dice[4]]

    # 지도의 값이 0이면 주사위 바닥에 있는 값 복사
    if data[x][y] == 0:
        data[x][y] = dice[-1]
    # 그렇지 않으면 주사위 바닥에 지도의 값 복사 후, 지도 0 초기화 
    else:
        dice[-1] = data[x][y]
        data[x][y] = 0

n, m, x, y, k = map(int, input().split())
data = [list(map(int, input().split())) for _ in range(n)]
cmds = list(map(int, input().split()))
dice = [0] * 6

dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]

for cmd in cmds:
    nx = x + dx[cmd - 1]
    ny = y + dy[cmd - 1]

    if 0 <= nx < n and 0 <= ny < m:
        turn(cmd, nx, ny)
        print(dice[0])
        x, y = nx, ny

 

저작자표시 (새창열림)

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 20056번 : 마법사 상어와 파이어볼 (Python)  (0) 2023.04.05
[백준] 21608번: 상어 초등학교 (Python)  (2) 2023.04.05
[백준] 17144번: 미세먼지 안녕! (Python)  (0) 2023.03.28
[백준] 15685번: 드래곤 커브 (Python)  (0) 2023.03.27
[백준] 14891번: 톱니바퀴 (Python)  (0) 2023.03.27
    '코딩테스트/백준' 카테고리의 다른 글
    • [백준] 20056번 : 마법사 상어와 파이어볼 (Python)
    • [백준] 21608번: 상어 초등학교 (Python)
    • [백준] 17144번: 미세먼지 안녕! (Python)
    • [백준] 15685번: 드래곤 커브 (Python)
    ye0nn
    ye0nn
    프론트엔드 개발자의 개발기록

    티스토리툴바