ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘 필수. Stack/Queue/재귀/bfs/dfs
    python 2023. 11. 17. 15:28

    1. Stack

     삽입 append()

     삭제 pop()

     

    2. Queue

     from collections import deque

     queue = deque()

     queue.append(5)

     queue.popleft()

     queue.reverse()

     

    3. Recursive Function

     def recursive_function(i):

       if i == 100:

           return

       recursive_function(i+1)

     

     recursive_function(1)

     

    3-1. Recursive Function - Factorial

     def fac(i):

        while i>1:

            return (i*fac(i-1))

        if i<=1:

            return 1

     

    3-2. 최대공약수 구하기: 유클리드 호제법과 Recursive Function을 이용

     A%B = R일때 A와 B의 최대공약수는 B와 R의 최대공약수이다.

     GCD(192,162)

      A        B

     192     162

     162     30 

     30       12

     12       6

     

    def gcd(a,b):

        if a%b ==0:

            return b

        else:

            return gcd(b,a%b)

     

    4. DFS : Depth-First Search

      - 깊은부분 우선탐색

      - 스택 자료구조 or 재귀함수로 구현

      (1) 탐색 시작노드를 스택에 넣고 방문처리

      (2) 스택 최상단 노드에 방문하지않은 노드를 스택에 넣고 방문처리

      (3) 더이상 2를 수행할 수 없을 때까지 반복

     

    ex. 그래프준비. v=시작노드번호. 방문기준은 번호가 낮은 인접노드부터.

    def dfs(graph,v,visited):

        visited[v]=True

        for i in graph[v]:

            if not visited[i]:

                dfs(graph,i,visited)

    graph=[

                0,[],

                 0,[2,3,8],

                 0,[1,7],

                 0,[1,4,5],

                 0,[3,5],

                 0,[3,4],

                 0, [7],

                 0,[1,7]

                 ]

     visited=[False]*9

     

    dfs(graph,1,visited)

     

    *stack: 1 2 7 6 8 3 4 5 

     

    5. BFS: Breadth-First Search

     - 최단거리 문제

     - queue 이용

     (1) 탐색 시작 노드를 큐에 삽입 & 방문처리 

     (2) 인접 노드를 모두 큐에 삽입 & 방문처리

     (3) 더이상 2를 할 수 없을 때까지 반복

     

     

    'python' 카테고리의 다른 글

    Running Time Check Code  (0) 2022.02.15
    Easy #1  (0) 2021.07.11

    댓글

Designed by Tistory.