250x250
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 |
Tags
- 연결리스트
- querydsl
- 데코레이터
- 즉시로딩
- 이진탐색
- 연관관계
- SQL프로그래밍
- 백트래킹
- 힙
- 다대다
- 동적sql
- 비관적락
- execute
- 스토어드 프로시저
- 지연로딩
- fetch
- 유니크제약조건
- 스프링 폼
- 낙관적락
- PS
- 일대다
- JPQL
- eager
- dfs
- shared lock
- exclusive lock
- FetchType
- BOJ
- 다대일
- CHECK OPTION
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
[BOJ] (BFS)13913번 숨바꼭질 4 본문
728x90
최대 사이즈만큼 미리 배열을 생성한다.
반복문안에 방문한 점을 표시하기 위해 arr[next]=cnt+1 문을 추가했다.
이미 방문한 점에는 더 짧은 경로로 도달할 수 있는데, 굳이 큐에 추가할 필요가 없기 때문이다.
이렇게 방문한 점을 표시하지 않으면 큐의 길이가 기하급수적으로 늘어나 메모리 초과가 발생한다.
from collections import deque
n, k = map(int, input().split())
SIZE = 100001
arr = [0] * SIZE
arr[n] = -1
def f():
# n==k
if n==k:
return 0, []
# k < n
if k < n:
return n-k, [i for i in range(n, k-1, -1)]
q = deque()
q.append((n, 0, [n]))
while q:
now, cnt, route = q.popleft()
# x+1
next = now+1
if next == k:
return cnt+1, route+[next]
if next < SIZE and arr[next]==0:
q.append((next, cnt+1, route+[next]))
arr[next] = cnt+1
# x-1
next = now-1
if next == k:
return cnt+1, route+[next]
if next >= 0 and arr[next] == 0:
q.append((next, cnt+1, route+[next]))
arr[next] = cnt+1
# x*2
next = now*2
if next == k:
return cnt+1, route+[next]
if next < SIZE and arr[next]==0:
q.append((next, cnt+1, route+[next]))
arr[next] = cnt+1
cnt, route = f()
print(cnt)
if len(route)==0:
print(n)
else:
print(*route)
https://www.acmicpc.net/problem/13913
13913번: 숨바꼭질 4
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
'Problem Solving' 카테고리의 다른 글
[BOJ] (MATH) 6064번 카잉 달력 ★ (0) | 2022.01.30 |
---|---|
[BOJ] (구현) 16927번 배열 돌리기 2 (0) | 2022.01.29 |
[BOJ] (GRAPH, DFS)13023번 ABCDE (0) | 2022.01.27 |
[BOJ] 15988번 1, 2, 3 더하기 3 (0) | 2022.01.26 |
[BOJ] 10972번 다음 순열 (0) | 2022.01.24 |