앎을 경계하기

알고리즘 26

파이썬에서 BFS, DFS 구현 시 주의사항(재귀 X)

인접 노드를 저장하기 위한 리스트를 만들 때 클래스 변수로 선언하는 경우를 조심해야한다. 하나의 클래스의 인스턴스들이 클래스 변수를 공유하기 때문에 각자의 인접노드를 개별적으로 갖고있지 않게 된다. 따라서 self를 사용해서 각자 인접한 노드를 저장하도록 하자. ''' 그래프 검색 DFS : 이어진 자식 노드 단위로 검색하는 방법, 트리 순회 방식도 포함, 스택사용 BFS : 레벨 단위로 검색하는 방법, 큐 사용 그래프 구성 노드, 엣지, 인접노드들은 링크드리스트로 연결되어있다. ''' from queue import Queue import copy class node : def __init__(self, v): self.ad = list() self.v = v self.mark = False #스택 또..

Programming/Python 2021.08.09

Graph - Bellman-ford's algorithm

참고 사이트 : https://ratsgo.github.io/data%20structure&algorithm/2017/11/27/bellmanford/ bellman-Ford's algorithm keywords : 최단 경로, 음수 사이클, 그래프 개념 벨만-포드 알고리즘은 Shortest path를 구할 때 graph 내 모든 edge에 대해 edge relaxation을 수행한다. 모든 노드 개수 : |V|-1개 모든 edge에 대해 edge-relaxation을 |V|-1회 수행한다. 방법) 시작 노드 A를 제외한 모든 노드의 value를 inf로 초기화한다. 노드 B에서 노드 C로 가는 경우, edge cost가 2인 경우, B노드 값 + 간선(B,C) = inf이기 때문에 업데이트할 필..

백준 #1890 - 점프

action = {right, down} 대신 밟은 번호만큼 움직인다. 각 번호를 밟았을때 right, down 모두 해서 마지막 goal에 닿으면 된다. goal에 닿으면 1을 return 한다. 이 값들을 누적하면 최종적으로 start에서 goal로 갈 수 있는 경로의 수를 알 수 있다. N = int(input()) board = [list(map(int, input().split(' '))) for _ in range(N)] memo = [[0 for _ in range(N)]for _ in range(N)] def dp(board, memo, i, j): if i>=N or j>=N: return 0 if i