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
                            
                        
                          
                          - 배낭문제
- cache
- TDD
- Garbage Collection
- 타임리프
- interceptor
- spring
- EntityGraph
- Transactional
- 클린아키텍처
- 자바
- 이펙티브자바
- 알고리즘
- Spring Security
- collapse
- 멱등성
- @Transactional
- effective java
- Java
- BFS
- AOP
- 캐시
- 동시성처리
- 코딩테스트
- JPA
- 파이썬
- EffectiveJava
- lombok
- thymeleaf
- JVM
                            Archives
                            
                        
                          
                          - Today
- Total
Jinnie devlog
BFS(너비 우선 탐색) - 백준 1697, 5014 본문
1697(숨바꼭질), 5014(스타트링크) 두 문제 모두 큐를 활용한 BFS 방식의 문제다.
이동할 수 있는 거리만큼의 for문을 돌며, 큐에 삽입하고 이동거리를 +1씩 해주며 최종 목적지의 이동거리를 구하였다.
똑같은 위치를 반복해서 방문하게 되면, 필요없는 작업을 하게되어 visited 배열을 통해 한번만 방문하도록 하였다.
백준 1697 숨바꼭질
from collections import deque
def bfs(s):
    q = deque([s])
    visited[s]=1
    while q:
        cur = q.popleft()
        if cur == K:
            return count[K]
        for i in (cur-1, cur+1, cur*2):
            if 0 <= i <= 100000 and visited[i]== 0:
                q.append(i)
                visited[i]=1
                count[i] = count[cur] + 1
                
N, K = map(int, input().split())
count = [0]* (100001)
visited= [0] * (100001)
print(bfs(N))
백준 5014 스타트링크
from collections import deque
def bfs(s):
    q=deque([s])
    visited[s] = 0
    while q:
        cur = q.popleft()
        if cur == G:
            return count[G]
        for i in (cur+U, cur-D):
            if 0 < i <= F and visited[i] == -1:
                q.append(i)
                count[i] = count[cur] + 1
                visited[i] = 0
    if count[G]==0:
        return "use the stairs"
    
F,S,G,U,D = map(int, input().split())
count = [0] * (F+1)
visited = [-1] * (F+1)
print(bfs(S))'Algorithm' 카테고리의 다른 글
| 최대 연속 부분배열 알고리즘 (0) | 2023.02.03 | 
|---|---|
| 코딩테스트를 위한 Python 문법 정리 (0) | 2023.02.03 | 
| 냅색(배낭) 알고리즘 (0) | 2023.01.24 | 
