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
- 그리디
- 재귀
- DP
- 플로이드-워셜
- 자료구조
- 해시
- 수학
- 그래프 이론
- 에라토스테네스의 체
- 다이나믹 프로그래밍
- join
- 누적합
- 다시
- 브루트포스
- BFS
- 다이나믹프로그래밍
- MST
- 다익스트라
- 구현
- 투포인터
- 그래프 탐색
- 트리
- GROUP BY
- DFS
- 서브쿼리
- 크루스칼
- 분할정복
- 우선순위큐
- 백트래킹
- 시뮬레이션
Archives
- Today
- Total
기록하고 까먹지 말기
13549 본문
날짜 : 2023. 03. 16
사용 언어 : python
문제
코드
from collections import deque
import sys
n, k = map(int, sys.stdin.readline().split()) # 시작점, 도착점
visited = [False] * 100001
visited[n] = True
move = [-1, 1]
res = []
def dfs(start, end, sec): # 시작점, 도착점, 소요시간
q = deque()
q.append([start, sec])
while q:
now, t = q.popleft()
#print(now, t)
tele = now * 2 # 순간이동
if now == end:
res.append(t)
return
if tele in range(100001) and not visited[tele]: # 범위에 있고 방문 x
visited[tele] = True # 방문처리
q.append([tele, t])
for i in range(2):
next = now + move[i] # 이동
if next in range(100001) and not visited[next]: # 범위에 있고 방문 안함
visited[next] = True # 방문처리
q.append([next, t + 1]) # 이동
return
dfs(n, k, 0)
print(min(res))
풀이
- 총 노드의 개수가 10만개이기 때문에 크기가 100001인 배열을 생성한다
- 시작점과 도착점을 입력받은 후 dfs를 실행한다
- 순간이동(tele)을 하는 경우 이동시간이 0인 특성상 가중치를 더하지 않고 처리한다
- 그 다음 일반 이동(+1, -1)을 하는 경우에는 1초가 소요되기 때문에 1을 가산하여 큐에 삽입한다
- 서로 가중치가 다르기 때문에 순간이동(가중치가 없음) -> 작은 수로 이동 -> 큰 수로 이동하는 순서로 판별, 큐에 삽입한다.
알게된 점
- 방법은 맞았지만 가중치가 다르기 때문에 (노드 - 1)을 (노드 + 1) 보다 우선적으로 판별해야 한다는 것을 모르고 +1부터 넣었다.
- 원래는 다익스트라로 푸는게 이상적인 풀이라고 한다.
참고 사이트
-