1260번: DFS & BFS (실버 2)
·
백준 (with JAVA)/그 외
1260번: DFS와 BFS (acmicpc.net) 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 1. 문제 설명 2. 입출력 조건 및 예제 입력 조건 (1) 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. (2) 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. (3) 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있으며, 입력으로 주어지는 간선은 양방향이..
BFS (Breadth First Search)
·
알고리즘 (with JAVA)/기본 알고리즘
1. 개념 설명 (1) BFS는 너비 우선 탐색으로 최대한 깊숙이 들어가서 탐색을 시작하는 DFS와는 달리 인접한 노드부터 먼저 탐색하는 방법이다. ( 아래 2. 과정을 통해 이해하자. ) (2) BFS는 재귀호출을 사용하는 DFS와는 달리, 자료구조 큐(Queue)를 사용하는 경우가 일반적이다. ( 그러므로, 3. 코드에서는 큐를 이용한 BFS를 보여줄 것이다. ) 2. 과정 - 실제로 수행되는 과정이며, 앞서 DFS(깊이 우선 탐색)과 BFS(너비 우선 탐색)을 비교하고 있다. 3. 코드 : BFS는 재귀를 사용하지 않고 일반적으로 큐를 통해 구현한다. ( 아래의 코드 (1)과 (2)는 위 그래프 그림을 기반으로 코드를 작성했다. ) (1) 인접 행렬 public class BFS_Matrix { s..
DFS (Depth First Search)
·
알고리즘 (with JAVA)/기본 알고리즘
1. 개념 설명 (1) DFS는 깊이 우선 탐색으로 트리나 그래프에서 한 루트로 탐색하다가 특정 상황에서 최대한 깊숙이 들어가서 확인한 뒤 다시 돌아가 다른 루트로 탐색하는 방식이다. (2) DFS는 스택 또는 재귀 함수로 구현할 수 있으며, 모든 경로를 방문해야 할 경우 사용에 적합하다. 2. 과정 - 실제로 수행되는 과정이며, 하나의 브랜치 조사가 다 끝나면 다시 다른 브랜치를 조사하고 있다. 3. 인접 행렬 vs 인접 리스트 (1) 인접 행렬 (Adjecency Matrix) : 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식이다. ( 만약 위와 같은 그래프가 있다고 한다면, 아래와 같이 2차원 배열을 사용한다. ) Graph = { {0, 1, 1, 0}, {1, 0, 1, 1}, {1, 1..
해시 테이블 (Hash Table)
·
알고리즘 (with JAVA)/기본 알고리즘
1. 개념 설명 (1) 해시 테이블은 키(key)를 값(value)에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료 구조이다. 2. 과정 - 실제로 수행되는 과정이며, key값을 가지고 해당하는 index위치에 가서 buckets에 있는 value에 매핑하고 있다. - 아래는 실제 3. 코드에서 진행되는 과정 중 하나이며, 이것을 이해하면 코드를 쉽게 이해할 수 있을 것이다. 1. apple이 들어옴. getHashkey(apple)의 결과 2가 나옴. length[2]는 0이므로 처음 들어온 값임. s_data[2][0]에 apple을 저장함. length[2]를 ++함. 2. abc가 들어옴. getHashKey(abc)의 결과 2가 나옴. length[2]는 1이므로 이미 들어온 값임. ..