메모 3월11일

minchan jung·2022년 3월 11일
0

일기장

목록 보기
3/5

알고 목록1

  1. BruteForce (5문)
  2. Greedy (3문)
  3. Heap (8문)
  4. Topology (3문)
  • 17.5H

알고 목록2

  1. BFS (8문)
  2. DFS (14문)
  • DFS-DP (5문)
  • Tree-DP (2문)
  • BackTrack(7문)
  1. 정렬
    • Hash
    • 분할 정복
    • 이분 탐색

알고 목록3

  1. 문자열 알고리즘
  2. 수학
  3. 자료구조
  4. 그래프, 트리

시간

1.5H: Test Case Check
1H: DFS with DP
1H: DFS with DP (py3, python3 메모리, recursion 이슈)
1H: DFS with DP (back-tracking checker )
2H : DFS with DP - Tree DP
0.5H : DFS with DP - Tree DP (우수마을)
1H : DFS with DP - Tree DP (트리의 독립집합-경로 복원까지- failed)

part1-tot : 8H
1.5H test case check
6.5H 6문 DFS-DP, tree-DP


1.0H : BackTracking (연산자 끼워넣기, 재귀 탈출조건 선행)
0.5H : BaackTracking (인원을 두팀으로 나눌때 가장 편차 작게, pos 인자로 안념겨 주면 시간초과 )
1.5H : 기록
0.5H : BackTracking (조합! 내장 모듈)
2.5H : BackTracking(1987,알파벳, 시간!,88% failed, SET!! 자료형 BFS)
1.0H : BackTracking (2580 수도쿠 ! BackTracking! )
1.0H : BackTracking (9663 N-Queen, 대각선, DFS(인자를 증가시키며), 대각선 선형체크!, xy중 하나만 걸려도 둘다 걸림 )
1.5H : BackTrack + BitMask + DFS-DP (외판원, Bitmask, 미완 )

part2-tot : 9.5H
8H : 7문 BackTracking
1.5H : 기록, and 공부

Tot : 17.5H
문항 : 13 + 1


1520 DFS + DP

  1. 도착 return 1
  2. 첫방문 아니면 return 기록값
  3. 첫방문이면 : dp 기록 = 0 초기화 해주고
    • 4방향 DFS 호출
    • dp += DFS 결과값 저장
    • for 4방향 탐색 완료 후 return 기록값

1937 욕심쟁이 판다 G3 DFS + DP

재귀 DP 초기화 방식 차이

  1. 방문한적 있으면 return dp 값

  2. 첫방문 : dp 초기값 = 0
    - 4방향 호출

    • 그 중 max 값만 선택
    • for 끝난 후 max값+1 (현재 칸수=1)로 dp 저장
    • 최종 dp 값 return

    첫 방문 or not 최종 적으로 return dp 해당지점 으로 동일
    굳이 return을 나눌 필요 없다.
    key 연산 or 재귀가 필요하면 재귀호출하고,
    해당 지점 모든 연산 or 재귀 호출이 완료되면 값 update하고 dp저장후 return 형태

Python3 재귀 늘리기 sys

from sys import setrecursionlimit 
setrecursionlimit(10**9)
  • py3 적용이 안된다.

1103 게임 G2 DFS + DP + BackTrack for vis

Python

quit() 답출력후 프로그램 종료

2533 사회망 서비스 G3

  1. tree dp 특징 : 리프까지 보낸다
  2. dfs 양방향 간선정보를 vis로 체크(복구x) 하면 트리 탐색이 가능
  3. dfs 쭈우욱 보낸다 leaf 까지 먼저
  4. leaf로 부터 역으로 올라갈때 자식 탐색 위에 dfs내 dp초기화값으로 update !

1943 우수마을 G2

  1. vis, DFS로 트리 순환
  2. 자식 leaf 까지 먼저 보낸다 ! DFS first in loop
  3. DFS내 지역 local 환경에서 vis 처리, dp값 초기화 (2케이스)
  4. loop DFS이후 자식값 참조후 update
  5. no return

1987 알파벳 G3 fail 시간초과 (88%)

  1. 4방향 경로 탐색의 조건이 2개
  2. 방문한곳 재방문 x + 중복된 알파벳을 가지지 않도록 방문 (여태 지나온 경로를 모두 알고 있어야 가능)
  3. 경로 마다 최대 case가 모두 다르기 때문에, dp로 메모할 수 없다
  4. 경로를 backTracking 하는 DFS => 4경로 모두 탐색 후에 표시 flag를 통해 탈출 조건으로 재귀의 반복성을 조금 줄일 수 있따.

1987 알파벳 G3 BFS set으로 통과

  1. vis, alph모두 조건을 걸면 back tracking 안됨
  2. 왔던길을 다시 갈 수 있게 해주려면, 알파벳 조건만으로만 방문확인을 걸어주면 된다.
  3. 그리고 set으로 q를 구현하고 pop add하면 되는데
  4. set으로 [누적거리, 좌표, 현재경로]를 저장하고, 동일한게 다시 Q로 담겨도, 동일한 경로로 중복 검색을 하지 않는다
  5. vis 처리하지 않아 재탐색 재방문 overhead 걱정 안해도 되며,
  6. 좌표만 인식해서 재방문처리하지 않으면, 동일 좌표를 여러번 방문할 수있다. 정확히 backTracking 처럼 동작!
    ( DFS-DP-Bitmask로 푸는게 효율적일수있다 (--외판원문제) )

BackTracking 을 BFS Q로 = SET!!

2580 스도쿠 G4

  1. BackTrack 처리, vis처리 : board의 값
  2. vis-valid checker : 가로,세로, 3x3

9663 N-Queen G3

  1. BackTrack 처리, visList 3개로 처리 (메모리로 효율!)
  2. 대각선, 라인(x,y= 가로세로 하나만 파악해도됨 ), 대각선 선형 리스트화
  3. BackTrack 인자 , increasing way

10971 외판원, BackTrack, DFS-DP, Bitmask

0개의 댓글