2H : 알고리즘 (heap, 이중 우선순위q)
2.5H : 알고리즘 (Topology)
1.5H : 알고리즘 (Topology)
0.5H : 기록 정리
1H : BFS S1
1H : BFS G4
8.5H
1.5H : BFS G3 아기상어
0.5H : BFS S2 촌수계산
0.5H : BFS S1 1389 케빈베이커의 단계
1.5H : BFS G4 3055 탈출 FS2번 시간지도
0.5H : BFS G4 3055 water spread 적용
1.0H : BFS S1 1325 효율적인 해킹 (시간초과와 에지케이스 애먹음)
1.5H : 기록
7H
1:35m
key 는 graph, board를 기존의 위상정렬 개념에서 반대로 구현
indg[0]으로 선행 관계를 확인하는 것은 동일
이 경우 선행 작업이 반드시 필요한 node 가 indg값 0 을 가진다.
즉 완제품, 선행해서 작업해줄 필요가 없는 독립적인 node를 반대로 먼저 탐색하게 함.
중요한 것은 indg 0으로 출발해서 참조할 연결 graph에 선행해야할 노드가 있으면 된다. 이관계만 잘파악하면 되는 것 같다.
엔트리 포함 해서 모두 체크 하면 시간 초과
BFS 벽을 부수지 않는 케이스 탐색:
BFS 벽을 부수는 케이스 탐색 :
이렇게 특이 조건을 부치는 케이스는 q에 담아 가는 케이스로 분기 할 수도 있지만, Q stack size over flow 가 날 수도 있다(고 하며, 경험이 ㅠ 주르륵)
메모리를 전역으로 빼서 효율을 올리는 전형적인 케이스!
BFS 구현 + 시물레이션 !
최단거리용 deque 사용
[최소거리, 위=최소값2, 왼쪽=최소값3]
세개 원소를 heap그냥 넣고 pop해서 사용 ! 깔끔!
2중 for 문, 3중 for문 3차원 리스트 한라인 쓰기
a = [ [[False, False] for _ in range(M)] for a in range(N) ]
아주간단한 BFS
양갈래로 부모자식 연결 노드
양방향
undirected 를 사용하는 것 잊지말고
최소힙, 우선순위 Q로 최단거리를 보장함을 잊지말자! ㅍ
아주 간단한 BFS
역시 양갈래로 연결 board
deque로 Q BFS
최소힙 heaqp로 정답 구현 (최소거리이자, 최소 인덱스), 정답 후보군 전부 힙에 밀어넣고 마지막에 힙 root만 pop 끝
BFS 를 2번할 경우
동시성으로 인해 맵을 spread마다 바뀌게 참조해야 하는데
퍼지는 시간을 참조할 수 있는 지도를 만들어서
board(장애물 참조), vis(방문 체크 참조), water spread(바이러스등 동시로 퍼지는 장애물 참조)로 세가지 참조 그래프를 만들어서 BFS를 동시에 진행하지않고 단계별로 !! 진행해 볼 수 있다 !!