본문 바로가기

c언어4

[알고리즘-17] 이진트리의 구현과 순회(Traversal) 방식 안녕하세요 기린입니다 :) 오늘은 완전 이진트리가 아닌 이진트리를 구현하는 방법과 해당 이진트리를 탐색하는 방법인 순회 방식에 대해 알아보겠습니다. 기본적으로 가장 많이 사용되는 비선형 자료구조는 이진 트리(Binary Tree)입니다. 이진 트리는 트리 자료구조를 활용한 대표적인 예시로 데이터의 탐색 속도 증진을 위해 사용하는 구조입니다. 이전에 힙 정렬(Heap Sort)을 구현할 때 간단하게 이진 트리에 대해 다루어 본 적이 있습니다. 힙 정렬에서 완전 이진 트리 구조를 사용했다면 이번 시간에는 실제로 트리를 제대로 구현해 보겠습니다. 일단 실제 트리를 구현하기 위해 포인터(Pointer)를 이용해 특정한 루트(Root)에서 자식 노드로 접근하도록 하겠습니다. 이진 트리의 구조는 위와 같이 생겼습니.. 2022. 5. 26.
[알고리즘-3] 삽입정렬 안녕하세요 기린입니다 :) 지난 시간까지 선택 정렬과 버블 정렬에 대해 알아보았습니다. 앞에서 다룬 정렬 알고리즘은 모두 시간 복잡도 모두 O(N^2)을 가진다는 점에서 비효율적이라 할 수 있죠. 이번시간에 다룰 삽입 정렬은 어떨지 한번 보겠습니다. 문제는 지난 시간과 동일합니다. 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 1 10 5 8 7 6 4 3 2 9 삽입 정렬은 위 문제를 풀 때 각 숫자를 적절한 위치에 삽입하는 방법으로 문제를 해결합니다. 자 여기서 다른 알고리즘들은 무조건 위치를 바꾸는 방식이었다면 삽입 정렬은 '필요할 때만' 위치를 바꾸게 되는데요 먼저, 소스 코드를 살펴 보겠습니다. #include int main(void) { int i, j, temp; int ar.. 2022. 3. 10.
[알고리즘-2] 버블정렬 안녕하세요 기린입니다 :) 오늘은 지난 시간에 이어서 버블 정렬에 대해 알아볼텐데요 자 버블정렬이란 일련의 숫자들을 오름차순으로 정렬하는것 인데요 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 1 10 5 8 7 6 4 3 2 9 버블정렬 또한 선택정렬과 같이 몹시 직관적인 해결 방법입니다 바로 가까이에 있는 두 숫자끼리 비교해서 더 작은 숫자를 앞으로 보내주는 것을 반복 하는 겁니다 다시 말해 버블정렬이란 옆에 있는 값과 비교하여 더 작은 값을 반복적으로 앞으로 보내는 정렬 방법인데요 정렬 알고리즘 중에서 구현은 가장 쉽지만 가장 비효율적인 알고리즘입니다 #include int main(void) { int i, j, temp; int array[10] = {1, 10, 5, 8, 7, .. 2022. 3. 7.
[알고리즘-1] 선택 정렬 안녕하세요 기린입니다 :) 알고리즘을 공부할 때 가장 먼저 풀어보는 문제로 '정렬(Sort)' 에 대해 알아보겠습니다. 수많은 알고리즘 중에서 이 정렬 알고리즘은 효율성의 차이를 극명하게 보여주기 때문에 단계적으로 공부하시면 효과적일 것 같습니다 자 바로 간단한 문제부터 시작해보겠습니다 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 1 10 5 8 7 6 4 3 2 9 위와 같은 문제를 만났을때 여러분들은 어떻게 푸실 건가요? 만약 처음 알고리즘을 공부하시는 분들이라면 머릿속이 복잡하실수도 있습니다.. 하하 만약 사람이라면 전체 숫자를 확인하고 1부터 10까지 숫자를 써내려 가겠죠 ? 하지만 컴퓨터에게는 그 과정을 구체적으로 명시해줘야 제대로 작동할 수 있습니다 그 과정을 알고리즘이라고 할.. 2022. 3. 6.