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 | 29 | 30 | 31 |
Tags
- 스토어드 프로시저
- 다대일
- querydsl
- PS
- eager
- execute
- 비관적락
- fetch
- 낙관적락
- JPQL
- 지연로딩
- 힙
- BOJ
- 연관관계
- CHECK OPTION
- 데코레이터
- 백트래킹
- dfs
- exclusive lock
- SQL프로그래밍
- 동적sql
- 즉시로딩
- 다대다
- 유니크제약조건
- 연결리스트
- shared lock
- 스프링 폼
- FetchType
- 일대다
- 이진탐색
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
'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 |