| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- BFS
 - 파이썬
 - css #생활코딩 #웹
 - 코딩테스트
 - java #자바 #동빈나
 - 농구
 - dp
 - 프로그래머스 #파이썬 #코딩테스트 #알고리즘
 - 자바 #java
 - PYTHON
 - 다이나믹프로그래밍
 - java #자바
 - 백트랙킹
 - css #웹 #생활코딩
 - 재귀
 - 백준 #알고리즘 #파이썬 #코딩테스트
 - 투포인터
 - 백준 #파이썬 #알고리즘 #코딩테스트
 - 다익스트라
 - Dijkstra
 - 파이썬 #알고리즘 #코딩테스트 #프로그래머스
 - DFS
 - 알고리즘
 - react #리액트 #동빈나 #나동빈 #유튜브강의
 - java #자바 #생활코딩
 - 프로그래머스 #파이썬 #알고리즘 #코딩테스트
 - 백준
 - java #자바 #나동빈
 - 파이썬 #백준 #알고리즘 #코딩테스트
 - 프로그래머스
 
													Archives
													
											
												
												- Today
 
- Total
 
커리까지
[백준] 18232번 텔레포트 정거장 파이썬 본문
728x90
    
    
  SMALL
    
문제
꽉꽉나라에 사는 주예와 방주는 점 S에서 만나 저녁을 먹기로 했다. 주예는 점 S에 도착했지만 길치인 방주가 약속시간이 30분이 지나도 나타나지 않자 방주에게 연락을 하여 방주가 점 E에 있다는 사실을 알아냈다. 주예는 방주에게 그 위치에 가만히 있으라고 했고, 직접 점 E로 가려고 한다.
꽉꽉나라에는 1부터 N까지의 각 점에 하나의 텔레포트 정거장이 위치해 있고 텔레포트를 통하여 연결되어 있는 다른 텔레포트의 정거장으로 이동할 수 있다. 주예는 현재 위치가 점 X라면 X+1이나 X-1로 이동하거나 X에 위치한 텔레포트와 연결된 지점으로 이동할 수 있으며 각 행동에는 1초가 소요된다. 배가 고픈 주예는 최대한 빨리 방주와 만나고 싶어 한다.
N과 텔레포트 연결 정보가 주어질 때 점 S에 있는 주예가 점 E까지 가는 최소 시간을 구해보자.
입력
첫 번째 줄에 정수 N, M이 공백으로 구분되어 주어진다. (2 ≤ N ≤ 300,000, 0 ≤ M ≤ min(N×(N-1)/2, 300,000))
두 번째 줄에 정수 S, E가 공백으로 구분되어 주어진다. (1 ≤ S, E ≤ N, S ≠ E)
그 다음 줄부터 M개의 줄에 걸쳐 텔레포트 연결 정보를 의미하는 정수 x, y가 주어진다. (1 ≤ x, y ≤ N, x ≠ y)
x y는 점 x의 텔레포트와 점 y의 텔레포트가 연결되어 있다는 뜻이다. M개의 연결정보는 중복되는 x y쌍이 없도록 주어진다.
출력
첫 번째 줄에 주예와 방주가 만날 수 있는 최소 시간을 출력한다.
예제 입력 1
5 1
1 5
1 4예제 출력 1
2
제출 답안
from collections import deque
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
s, e = map(int, input().split())
graph = [[] for _ in range(n + 1)]
visited = [-1] * (n + 1)
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)
def bfs(start):
    q = deque([start])
    visited[start] = 0
    while q:
        node = q.popleft()
        nxt = [node + 1, node - 1]
        if graph[node]:
            nxt += graph[node]
        for i in nxt:
            if 1 <= i <= n and visited[i] == -1:
                q.append(i)
                visited[i] = visited[node] + 1
            if i == e:
                return visited[i]
answer = bfs(s)
print(answer)728x90
    
    
  LIST
    '알고리즘 > 풀이' 카테고리의 다른 글
| [백준] 24447번 알고리즘 수업 - 너비 우선 탐색 4 파이썬 (0) | 2023.09.11 | 
|---|---|
| [백준] 18126번 너구리 구구 파이썬 (0) | 2023.09.09 | 
| [백준] 24483번 알고리즘 수업 - 깊이 우선 탐색 5 파이썬 (0) | 2023.09.07 | 
| [백준] 24446번 알고리즘 수업 - 너비 우선 탐색 3 파이썬 (0) | 2023.09.07 | 
| [백준] 24482번 알고리즘 수업 - 깊이 우선 탐색 4 파이썬 (0) | 2023.09.06 | 
			  Comments