yuns
[23289] python 주사위 굴리기 본문
반응형
문제 링크
https://www.acmicpc.net/problem/23289
문제 요약
- 지도위에 있는 숫자가 0일 경우와 아닐 경우 각각 다르게 지도와 주사위를 업데이트 해준다
- 지도위에 있는 숫자가 0일 경우
- 주사위 바닥면을 지도 위에 복사
- 지도위에 있는 숫자가 0이 아닐 경우
- 주사위 바닥면을 지도위의 숫자로 바꾼 뒤, 지도위의 숫자를 0으로 세팅
- 지도위에 있는 숫자가 0일 경우
아이디어 정리
- 아래 과정이 필요
- 동, 서, 북, 남을 옮길 때 주사위 위치를 dxy로 선언해준다.
- 주사위의 list을 문제에서 주어진 1-6의 위치를 순으로 나열한다.
- 방향에 따라 돌아가는 주사위를 고려하여 주사위의 순서를 바꿔준다.
- 문제에서 주사위를 굴린 뒤, 나온 지도위의 숫자에 따라 주사위와 지도의 값을 바꿔준다.
문제 풀이
- 아이디어 정리에 사용한 대로 코드 작성
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