yuns

[23289] python 주사위 굴리기 본문

algorithms/백준

[23289] python 주사위 굴리기

yuuuun 2022. 3. 1. 22:41
반응형

문제 링크

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

문제 요약

  • 지도위에 있는 숫자가 0일 경우와 아닐 경우 각각 다르게 지도와 주사위를 업데이트 해준다
    • 지도위에 있는 숫자가 0일 경우
      • 주사위 바닥면을 지도 위에 복사
    • 지도위에 있는 숫자가 0이 아닐 경우
      • 주사위 바닥면을 지도위의 숫자로 바꾼 뒤, 지도위의 숫자를 0으로 세팅

아이디어 정리

  • 아래 과정이 필요
    1. 동, 서, 북, 남을 옮길 때 주사위 위치를 dxy로 선언해준다.
    2. 주사위의 list을 문제에서 주어진 1-6의 위치를 순으로 나열한다.
    3. 방향에 따라 돌아가는 주사위를 고려하여 주사위의 순서를 바꿔준다.
    4. 문제에서 주사위를 굴린 뒤, 나온 지도위의 숫자에 따라 주사위와 지도의 값을 바꿔준다.

문제 풀이

  1. 아이디어 정리에 사용한 대로 코드 작성
n, m, x, y, k = map(int, input().split())
maps = []
for _ in range(n):
    maps.append(list(map(int, input().split())))

directions = list(map(int, input().split()))

dxy = [[], [0, 1], [0, -1], [-1, 0], [1, 0]]    # 동, 서, 북, 남
dice = [0, 0, 0, 0, 0, 0, 0] # idx를 위해서 앞에 허수 붙여줌 

def change_dice(t):
    if t == 1: # 동 - 2, 5 그대로
        dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
    elif t == 2: # 서 - 2, 5 그대로
        dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
    elif t == 3: # 북 - 3, 4 그대로
        dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
    else: # 남 - 3, 4 그대로
        dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]

for t in directions:
    dx, dy = dxy[t][0], dxy[t][1]
    x, y = x + dx, y + dy
		# 범위를 넘어갈 경우, 아무런 동작을 하지 않기 때문에 값을 되돌려준 뒤, 아래 과정 생략한다.
    if x < 0 or x >= n or y < 0 or y >= m:
        x = x - dx
        y = y - dy
        continue

    change_dice(t)
    if maps[x][y] == 0:
        maps[x][y] = dice[6]
    else:
        dice[6] = maps[x][y]
        maps[x][y] = 0
    print(dice[1])
반응형

'algorithms > 백준' 카테고리의 다른 글

[19238] python 스타트 택시  (0) 2022.03.01
[23288] python 주사위 굴리기2  (0) 2022.03.01
[21609] python 상어 중학교  (0) 2022.03.01
[21610] python 마법사 상어와 비바라기  (0) 2022.03.01
[23289] python 온풍기 안녕!  (0) 2022.03.01
Comments