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
- 백준
- C언어
- BASIC
- web
- BFS
- C
- server
- 생활코딩
- DP
- 따라하면서 배우는 C언어
- dfs
- JavaScript
- Algorithm
- programmers
- greedy
- 인프런
- Cleancode
- BOJ
- Math
- 종만북
- udemy
- 따배씨
- 정수론
- Python
- graph
- String
- 따라하며 배우는 C언어
- Algospot
- sorting
- php
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 5014 / 스타트링크 / Python 파이썬 본문
[BOJ] 5014 / 스타트링크 / Python 파이썬
https://www.acmicpc.net/problem/5014
풀이
최단거리 구하기 문제로 BFS를 사용하여 풀었다.
처음의 시도에서는 시간초과가 계속 발생 하였는데, 이것은 queue 에 추가하기 전에 visited check 를 하는것으로 해결하였다.
queue 에서 꺼낼때 visited check 를 하는것이 경우의 수가 더 많기 때문이었다.
※ 전혀 고려하지 못하였던 부분이라 새롭게 공부하게 되었다.
from collections import deque
F, S, G, U, D = map(int, input().split())
# 가장 높은 층은 F층이다.
# 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다.
# U버튼은 위로 U층을 가는 버튼, D버튼은 아래로 D층을 가는 버튼이다.
# (만약, U층 위, 또는 D층 아래에 해당하는 층이 없을 때는, 엘리베이터는 움직이지 않는다)
queue = deque()
queue.append((S, 0))
visited = [0] * (F+1)
visited[S] = 1
res = F
while queue:
s, cnt = queue.popleft()
# 경우의 수가 더 많아진다.
# visited[s] = 1
if s == G:
res = min(res, cnt)
break
if s + U <= F and not visited[s+U]:
visited[s+U] = 1
queue.append((s+U, cnt+1))
if s - D >= 1 and not visited[s-D]:
visited[s-D] = 1
queue.append((s-D, cnt+1))
if res == F:
print("use the stairs")
else:
print(res)
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 2580 / 스도쿠 / Python 파이썬 (0) | 2021.08.05 |
---|---|
[BOJ] 1759 / 암호 만들기 / Python 파이썬 (0) | 2021.08.04 |
[BOJ] 3108 / 로고 / Python 파이썬 (0) | 2021.08.03 |
[BOJ] 2186 / 문자판 / Python 파이썬 (0) | 2021.08.02 |
[BOJ] 2251 / 물통 / Python 파이썬 (0) | 2021.08.01 |
Comments