Cute Running Puppy
반응형

algorithm/기본 지식 3

BFS

Breadth First Search 너비 우선 탐색 가까운 노드부터 탐색하는 알고리즘 큐 자료구로를 사용하는 것이 정석 (인접한 노드를 큐에 넣으면 먼저 들어온 것이 먼저 나가게 되므로 가까운 노드부터 탐색할 수 있다) 사용하는 경우 (유형) 연결된 그래프를 탐색하는 경우 최단 거리(최소 횟수)를 구하는 경우 (현재 노드에서 가까운 곳을 먼저 찾기 때문) 그래프의 규모가 크지 않고 시작 지점으로부터 대상이 멀지 않은 경우 cf) 경로의 특징을 저장하는 경우에는 DFS 사용 (BFS는 경로의 특징을 가질 수 없다) 동작 방식 탐색 시작 노드를 큐에 삽입하고 방문 처리 큐에서 노드를 꺼내 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리 2번을 더 이상 수행할 수 없을 때까지 반복 code ..

DFS

Depth First Search 깊이 우선 탐색 그래프의 깊은 부분을 우선적으로 탐색하는 알고리즘 특정 경로로 탐색하다가 특정 상황에서 최대한 깊숙히 들어가 노드를 방문한 뒤, 다시 돌아가 다른 경로로 탐색하는 알고리즘 다음 분기로 넘어가기 전 해당 분기를 완벽하게 탐색하는 방법 BFS 보단 느리다 (단순 검색 속도) 백트래킹과 연관된다 DFS를 사용하는 경우 모든 노드를 방문하고자 할 때 순회를 하고자 할 때 경로에 특징을 저장해야 할 때 검색 대상 그래프가 클 때 cf) 최단거리는 BFS가 유리 동작 방식 탐색 시작 노드를 스택에 삽입하고 방문 처리 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를..

최댓값과 최솟값의 초깃값 지정

최댓값 → 최솟값을 초깃값으로 최솟값 → 최댓값을 초깃값으로 sys 사용 시스템에서 지정할 수 있는 가장 크고, 작은 값을 활용 mx = -sys.maxsize mn = sys.maxsize float 사용 float을 사용하여 무한대 값을 지정 mx = float('-inf') mn = float('inf') 임의의 값 (999999 등)을 최댓값, 최솟값 등으로 설정하는 것은 가장 좋지 않은 방법이다. 파이썬은 임의 정밀도를 지원하여 사실상 무한대의 값을 지정할 수 있다. 얼마든지 지정한 값 보다 작거나, 큰 값이 들어올 수 있다. 혹은 코테 문제에서 기술되어 있는 제약 조건을 확인한 뒤 기준에 맞추어 최대, 최솟값을 처리하면 된다