- 문제 : https://www.acmicpc.net/problem/5014
문제 이해
- 1 부터 building 까지의 범위 안에서 current에서 company로 이동하는 최소 칸 수를 출력하는 문제다.
- 이동은 한 번에 +u 또는 -d로 진행된다.
풀이 로직
- 입력값들을 받은 다음 arr를 설정해준다.
- queue를 가지고 bfs를 진행하는데 현재 있는 노드가 company라면 while문을 종료한다.
- 현재 있는 노드가 company가 아니라면 u와 d로 이동하면서 범위 내의 방문하지 않은 노드들 위주로 탐색한다.
- 이동하면서 이전에 방문하지 않은 노드들을 탐색하면서 이전 노드의 값 + 1(arr[x] + 1)로 업데이트 해준다.
- 반복문이 종료된 뒤 arr[company] 값에 따라 출력을 다르게 해주면 된다.
정답 풀이
고려하지 않아도 될 상황을 고려해서 시간초과가 많이 발생했는데, 이 문제는 단순 bfs로 풀면 되기 때문에 방문하지 않은 노드들에 대해서만 진행하면 된다.
building, current, company, u, d = map(int, input().split())
arr = [0] * (building + 1)
arr[current] = 1
queue = [current]
while queue:
x = queue.pop(0)
if x == company:
break
for nx in [x + u, x - d]:
if 1 <= nx <= building :
if not arr[nx]:
arr[nx] = arr[x] + 1
queue.append(nx)
if arr[company] == 0:
print("use the stairs")
else:
print(arr[company] - 1)
'백준 > Search' 카테고리의 다른 글
[bfs/백준] 7576번 : 토마토 (0) | 2023.05.17 |
---|---|
[bfs/백준] 6593번 : 상범 빌딩 (0) | 2023.05.16 |
[bfs/백준] 1743번 : 음식물 피하기 (1) | 2023.05.16 |
[bfs/백준] 13913번 : 숨바꼭질 4 (0) | 2023.05.15 |
[bfs/백준] 13549번 : 숨바꼭질3 (0) | 2023.05.15 |