Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 백준1463
- 9095
- C++ 공백 입력
- C++
- 패스트캠퍼스
- AIDEEPDIVE
- 혁펜하임
- pytorch
- 비교연산자
- 백준9095
- 패스트캠퍼스혁펜하임
- 1로만들기
- 혁펜하임AI
- 조건문
- for문
- 1463
- C++ 백준
- c++ 기초
- CUDA
- AI강의
- 백준1026
- 백준
- precision
- 반복문
- C++ 함수
- tensorflow
- cuDNN
- 백준C++
- 혁펜하임강의후기
- 혁펜하임강의
Archives
- Today
- Total
코딩하는 덕구 🐶
146. [삼성기출42]Python 백준 23288 주사위 굴리기 2 본문
728x90
안녕하세요 코딩하는 덕구입니다.
파이썬 백준 23288 주사위 굴리기 2 입니다.
https://www.acmicpc.net/problem/23288
23288번: 주사위 굴리기 2
크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼
www.acmicpc.net
문제 접근
주사위 구현이 가장 까다롭다.
이렇게 구현을 하고 주사위가 굴렀을 때 상, 하, 좌, 우, 앞, 뒤의 면이 어디서 오게되는지 생각했다.
dice = (1, 6, 4, 3, 5, 2) #상, 하, 좌, 우, 앞, 뒤
def roll_dice(d):
global dice
up, down, left, right, front, back = dice
if d == 0: #우
dice = (left, right, down, up, front, back)
elif d == 1: #하
dice = (back, front, left, right, up, down)
elif d == 2: #좌
dice = (right, left, up, down, front, back)
elif d == 3: #상
dice = (front, back, left, right, down, up)
Python 정답 코드
백준 23288 주사위 굴리기 2 코드입니다.
from collections import deque
N, M, K = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
dx = (0, 1, 0, -1)
dy = (1, 0, -1, 0)
dice = (1, 6, 4, 3, 5, 2) #상, 하, 좌, 우, 앞, 뒤
def roll_dice(d):
global dice
up, down, left, right, front, back = dice
if d == 0: #우
dice = (left, right, down, up, front, back)
elif d == 1: #하
dice = (back, front, left, right, up, down)
elif d == 2: #좌
dice = (right, left, up, down, front, back)
elif d == 3: #상
dice = (front, back, left, right, down, up)
def score(x, y):
visited = [[False for _ in range(M)] for _ in range(N)]
visited[x][y] = True
q = deque()
B = board[x][y]
C = 1
q.append((x, y))
while q:
x, y = q.popleft()
for d in range(4):
nx, ny = dx[d] + x, dy[d] + y
if 0 <= nx < N and 0 <= ny < M:
if not visited[nx][ny] and board[nx][ny] == B:
visited[nx][ny] = True
q.append((nx, ny))
C += 1
return B * C
def solve():
x, y = 0, 0
d = 0
ans = 0
for _ in range(K):
nx, ny = dx[d] + x, dy[d] + y
if not (0 <= nx < N and 0 <= ny < M):
d = (d + 2) % 4
x, y = dx[d] + x, dy[d] + y #move
roll_dice(d)
ans += score(x, y)
if dice[1] > board[x][y]:
d = (d + 1) % 4
elif dice[1] < board[x][y]:
d = (d + 3) % 4
return ans
print(solve())
백준 23288 주사위 굴리기 2 Python 코드였습니다.
감사합니다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
148. [삼성기출44]Python 백준 23290 마법사 상어와 복제 (0) | 2023.10.04 |
---|---|
147. [삼성기출43]Python 백준 23289 온풍기 안녕! + 디버깅 과정 (0) | 2023.09.11 |
145. [삼성기출41]Python 백준 21611 마법사 상어와 블리자드 (0) | 2023.09.08 |
144. [삼성기출40]Python 백준 21610 마법사 상어와 비바라기 시간초과 관련 (0) | 2023.09.06 |
143. [삼성기출39]Python 백준 21609 상어 중학교 (0) | 2023.09.06 |