그래프 4

[BFS] 알고리즘 - 너비 우선 탐색 (BFS, Breadth First Search)

너비 우선 탐색 (BFS, Breadth First Search) 한 노드에서 시작한 후 시작 노드의 인접한 노드부터 탐색하는 방법이다. 가까운 노드부터 탐색하는 알고리즘 이다. 시작 노드로부터 가까운 정점을 먼저 방문하고 멀리 있는 노드는 마지막에 방문하는 방식이다. 넓게 탐색하는 방식이다. 일반적으로 선입선출 방식인 큐 자료구조를 활용한다. 인접한 노드를 반복적으로 큐에 넣도록 알고리즘을 작성하면 먼저 들어온 것이 먼저 나가게 되어 가까운 노드부터 탐색이 이루어진다. 특징 여러 갈래중 무한한 길이를 가지는 경로가 존재하고 탐색 목표가 다른 경로에 존재하는 경우에는 DFS는 무한루프에 빠져 종료되지 못하지만, BFS는 동시에 탐색이 진행되기때문에 탐색이 완료될 수 있다. 모든길을 한번씩 탐색하기 때문에..

알고리즘/개념 2023.07.27

[DFS] 알고리즘 - 깊이 우선 탐색 (DFS)

깊이 우선 탐색 알고리즘 (DFS) 한 루트로 들어가 가장 깊이 들어가서 탐색후 돌아가 다시 다른 루트로 가장 깊이 탐색하는 방식이다. 넓게 탐색하는 것이 아닌 깊이 탐색하는 방식이다. 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 스택 자료구조를 사용한다. 구현 방법 재귀 호출 스택 배열 동작 과정 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다 2번의 과정을 더 이상 수행할 수 없을 때 까지 반복한다. 사용 용도 순회를 하는 경우에 많이 사용된다. 백트레킹에 사용된다. 자동 미로 생성에 많이 사용된다. 유향 그래프에서 ..

알고리즘/개념 2023.07.26

[프로그래머스] 가장 먼 노드 by 파이썬(Python) : 그래프 bfs

https://school.programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV 3 문제 설명 n개의 노드가 주어지고 1번 노드로 부터 가장 먼 노드의 갯수를 구해서 Return 해주어야 한다. 이때 가장 멀리 떨어진 노드란 최단 경로로 이동했을 때 간선의 갯수가 가장 많은 노드를 의미한다. 접근법 그래프 이론 알고리즘의 인접 리스트 방식으로 주어진 입력을 변환해준다. 거리(간선 개수)를 저장 해줄 리스트를 만들고 BFS를 사용해 최단 경로의 간선 개수를 센후 저..

[그래프 이론] 알고리즘 - 그래프 이론 (Graph)

그래프 이론 알고리즘 정점들과 간선들로 이루어진 집합을 "그래프"라고 한다. 그래프는 노드와 간선으로 표현되며 이때 노드를 정점이라고도 표현한다. 그래프의 종류 트리 : 부모, 자식 계층 구조를 가진다. (특징 : 간선 수 = 노드 수 - 1) 이진트리 : 각 노드의 자식 노드 수가 2개 이하로 구성되어 있는 트리를 의미한다. 정 이진 트리 자식 노드가 0 또는 2개인 이진 트리를 의미 한다. 완전 이진 트리 왼쪽부터 채워져 있는 이진트리, 마지막 레벨을 제외하고는 모든 레벨이 완전히 채워져 있으며 마지막 레벨의 경우 왼쪽부터 채워져 있다. 변질 이진 트리 자식 노드가 하나밖에 없는 이진 트리를 의미한다. 포화 이진 트리 모든 노드가 꽉 차 있는 이진 트리를 의미한다. 균형 이진 트리 모든 노드의 왼쪽 ..

알고리즘/개념 2023.07.25