반응형
250x250
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
- 사회조사분석사 2급 필기 공부방법
- 머신러닝
- 벽부수고이동하기 파이썬
- 파이썬 정렬
- 백준 알고리즘
- 사회조사분석사 2급 필기 요약정리
- 2월공모주
- 공모주 청약
- 공모주
- 공모주청약
- 사회조사분석사 2급 접수
- 사회조사분석사 2급 기출문제집
- 알고리즘
- 사회조사분석사 2급 공부방법
- 사회조사분석사 2급 독학
- 현대엔지니어링 수요예측
- 그리디
- 사회조사분석사 2급 필기 시험시간
- 사회조사분석사 2급
- 시물레이션
- 사이킷런
- 정렬
- 백준
- DFS
- 너비우선탐색
- 오미크론 자가격리
- 사회조사분석사2급실기신청꿀팁
- 현대엔지니어링
- 사회조사분석사2급실기신청
- BFS
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 16928번] 뱀과 사다리 게임 - 파이썬 본문
문제 링크:
https://www.acmicpc.net/problem/16928
풀이 유형:
그래프 이론, 그래프 탐색, 너비 우선 탐색
풀이 과정:
이 문제는 앞서 풀은 이모티콘 문제와 유사하다. 이모티콘 문제는 다음 포스트를 참고하자.
https://data-flower.tistory.com/80
여기서 사다리와 뱀을 딕셔너리로 받는다는 점이 이모티콘에서의 클립보드를 받는 점과 매우 유사하다.
너비 우선 탐색(bfs)을 이용해 큐에서 하나씩 원소를 꺼내어 확인해주면 된다.
이 문제는 다음 조건들을 고려해야 한다.
- 이동하는 위치(next_place)에 사다리가 있다면, 이동하는 위치(next_place)가 사다리를 타고 올라가야 한다는 점
- 이동하는 위치(next_place)에 뱀이 있다면, 이동하는 위치(next_place)가 뱀을 타고 내려와야 한다는 점
- 이동하는 위치에(next_place)에 아무것도 없다면, 해당 위치를 방문 표시 및 주사위 굴린 횟수를 1개 추가해야 한다는 점
조건을 이해했다면, 이제 뱀과 사다리 게임 문제를 풀어보자.
풀이 코드:
# 16928 뱀과 사다리 게임
from collections import deque
# 사다리의 수, 뱀의 수 입력받기
n, m = map(int, input().split())
# 1부터 100번째 칸 방문횟수
board = [0] * 101
# 맵 방문표시
visited = [False] * 101
# 사다리, 뱀 딕셔너리 선언
ladder = dict()
snake = dict()
# 사다리 정보 입력받기
for _ in range(n):
a, b = map(int, input().split())
ladder[a] = b
# 뱀 정보 입력받기
for _ in range(m):
a, b = map(int, input().split())
snake[a] = b
# 큐 구현
q = deque([1])
# 큐가 빌 때까지 반복
while q:
x = q.popleft()
# 100번 칸에 도착했다면
if x == 100:
# 주사위 굴린 횟수 출력
print(board[x])
# 반복문 탈출
break
# 주사위에 있는 1부터 6까지 차례대로 입력받아
for dice in range(1, 7):
# 다음으로 이동할 위치 보기
next_place = x + dice
# 맵을 벗어나지 않거나 아직 방문하지 않은 칸이라면
if next_place <= 100 and not visited[next_place]:
# 이동할 위치에 사다리가 있다면
if next_place in ladder.keys():
next_place = ladder[next_place]
# 이동할 위치에 뱀이 있다면
if next_place in snake.keys():
next_place = snake[next_place]
# 이동할 위치에 아무것도 없다면
if not visited[next_place]:
# 방문 표시
visited[next_place] = True
# 주사위 굴린 횟수 추가
board[next_place] = board[x] + 1
# 큐에 이동한 위치 삽입
q.append(next_place)
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 2206번] 벽 부수고 이동하기 - 파이썬 (40) | 2022.02.28 |
---|---|
[백준 12886번] 돌 그룹 - 파이썬 (40) | 2022.02.26 |
[백준 14226번] 이모티콘 - 파이썬 (61) | 2022.02.24 |
[백준 13913번] 숨바꼭질 4 - 파이썬 (63) | 2022.02.23 |
[백준 1697번] 숨바꼭질 - 파이썬 (71) | 2022.02.22 |
Comments