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
- 몬티홀
- BFS
- 그래프 탐색
- 적정 스레드
- 이진탐색
- GC
- 회고
- springboot
- 마크다운
- 배열 돌리기1
- deque
- g1gc
- 분할정복
- Python
- Markdown
- 정수론
- 그래프탐색
- 구현
- 프로세스
- 빌더패턴
- github
- Stack
- Greedy
- 그리디
- DP
- 문제풀이
- 백준
- 면접복기
- 브루트포스
- GarbageCollector
Archives
- Today
- Total
FeelingXD
[백준-16928] 뱀과 사다리게임 본문
❓ Problem
🤔 How
- 그래프 탐색문제 로 분류되고 100칸에 가장 빨리가는경우를 찾는것이다.
- 뱀과 사다리를 만날경우 반드시 이동한다
- 이점을 놓지기 쉬운데 뱀과 사다리를 만나서 visited 체크를 하고 넘기는 방법으로 접근한다면 뱀 (혹은 사다리) 시작지점에서 멈추는 경우도 계산해버리게 된다. (예를들어 2->16 으로가는 사다리가있다면 사실상 2번은 방문처리 할 수없다.)
❗ Solve
# 뱀과 사다리 게임
import sys
from collections import deque, defaultdict
input = sys.stdin.readline
def solution():
global visited, board, snake_and_stair
N, M = map(int, input().split())
visited = [False] * 101
board = [0] * 101
snake_and_stair = defaultdict(
int, {k: v for k, v in (map(int, input().split()) for _ in range(N + M))}
)
bfs(1)
pass
def bfs(pos):
q = deque([pos])
visited[pos] = True # 방문 여부를 저장
board[pos] = 0 # 주사위 횟수를 저장
while q:
pos = q.popleft()
if pos == 100:
print(board[pos])
break
else:
for dice in range(1, 7):
next_pos = pos + dice
if next_pos > 100 or visited[next_pos]: # 방문 한경우 넘기기
continue
if snake_and_stair[next_pos]:
next_pos = snake_and_stair[next_pos] # 뱀,사다리 이동
if visited[next_pos]:
continue
board[next_pos] = board[pos] + 1
visited[next_pos] = True
q.append(next_pos)
pass
if __name__ == "__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 알고리즘' 카테고리의 다른 글
Python 으로 알아보는 몬티홀(Monty-hall) 문제 🤔 (0) | 2024.02.17 |
---|