DFS(Depth First Search)와 BFS(Breath First Search)

DFS(Depth First Search)와 BFS(Breath First Search)

  • 깊이 우선 탐색(Depth First Search)
    • 루트 노드에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법
    • 재귀함수를 기반으로 순환 알고리즘의 형태를 지님.
  • 너비 우선 탐색(Breath First Search)
    • 루트 노드에서 시작해서 인접한 노드를 먼저 탐색하는 방법
    • 재귀함수로 동작하지 않는다.
    • 큐를 사용하여 효율적으로 구현 가능하다.

hackerearth

Read More
[C++]스택(Stack)과 큐(Queue)
[C++]BOJ 1202 - 보석 도둑
힙 정렬(Heap Sort)

힙 정렬(Heap Sort)

최대 힙 트리나 최소 힙 트리를 구현해 정렬하는 방법이다.

wikipedia

트리 구조로 보여주는 움짤을 찾아보려 했으나 귀찮았다.

Read More
병합 정렬(Merge Sort)

병합 정렬(Merge Sort)

퀵소트와 마찬가지로 분할정복 알고리즘이다.
재귀함수를 이용해 배열을 절반으로 잘라가며 분할하고 정복한다.

wikipedia

Read More
퀵 정렬(Quick Sort)
삽입 정렬(Insertion Sort)
버블 정렬(Bubble Sort)
선택 정렬(Selection Sort)
[C++]BOJ 11053 - 가장 긴 증가하는 부분 수열

[C++]BOJ 11053 - 가장 긴 증가하는 부분 수열

이전의 반도체 설계 문제와 동일하게 최장 증가 수열을 구하는 문제다.

2020년 4원 7일 포스트 수정

저 문제 풀 때는 dp가 뭔지도 몰랐다.
이번엔 동적 계획법으로 풀어봤다.
dp[i]에 arr[i]이전의 값들을 비교하며 arr[i]보다 작은 값이 있다면 그 때의 dp[]에 담겨있는 값 + 1을 dp[i]에 넣는다. arr[i]이전의 모든 수에 위 과정을 반복했을 때 가장 큰 수가 dp[i]가 된다.
마지막으로 dp[]에 담겨있는 값 중 가장 큰 값이 최장증가수열의 길이가 된다.

Read More