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
- GROUP BY
- 다익스트라
- 그리디
- 구현
- 시뮬레이션
- 브루트포스
- 수학
- 누적합
- 해시
- 재귀
- 그래프 이론
- join
- 자료구조
- BFS
- 트리
- 우선순위큐
- 서브쿼리
- 다시
- 분할정복
- 크루스칼
- MST
- 투포인터
- DP
- 그래프 탐색
- 다이나믹프로그래밍
- DFS
- 에라토스테네스의 체
- 백트래킹
- 플로이드-워셜
- 다이나믹 프로그래밍
Archives
- Today
- Total
기록하고 까먹지 말기
5014 본문
날짜 : 2023. 02. 28
사용 언어 : python
문제
코드
import sys
from collections import deque
f, s, g, u, d = map(int, sys.stdin.readline().split()) # 층수, 현재, 목표, 위, 아래
res = list()
visited = [False] * (f + 1)
count = [0] * (f + 1)
def bfs(cur):
visited[cur] = True
q = deque()
q.append(cur)
while q:
now = q.popleft()
if now == g:
return count[g]
for i in (now + u, now - d): # 위, 아래로 이동
if i in range(1, f + 1) and not visited[i]: # 범위 포함, 방문 x
visited[i] = True # 방문처리
count[i] = count[now] + 1 # 버튼횟수 최신화
q.append(i) # push
if count[g] == 0: # 방문전력이 없다면
return -1
res = bfs(s)
if res < 0: print("use the stairs")
else: print(res)
풀이
- 각 층별 이동횟수, 방문여부 체크를 위한 리스트를 만든 후 bfs를 통해 위아래로 이동하면서 각 층수를 체크한다.
- 건물은 0층은 존재하지 않고 1층부터 존재하기 때문에 이를 주의한다.
알게된 점
- 단순 while문으로 해결하려 하다보니 문제가 복잡해졌다.
- 다른사람의 풀이를 간단히 참고해보니까 위, 아래로의 케이스를 확인하고 거기서 분기하여 방문처리를 하는 것이 더 효율적이었다.
- 다른 문제중에 숨바꼭질 문제도 있으니 풀어보아야겠다.
참고 사이트
- https://letalearns.tistory.com/43