본문 바로가기

분류 전체보기

(101)
#07 자료구조 연결리스트 (LinkedList) 연결기반 리스트구현해보기#ifdef _MSC_YER#define _CRT_SECURE_NO_WARNINGS#endif#include #include typedef struct _node{ int data; struct _node* next;} Node;int main(void){ Node* head = NULL; Node* tail = NULL; Node* cur = NULL; Node* newNode = NULL; int readData; //데이터 입력 while (1) { printf("자연수 입력: "); scanf("%d", &readData); if (readData 구현#ifdef _MSC_VER#define _CRT_SECURE_NO_WARNINGS#endif#include #incl..
#06 자료구조 배열기반리스트 (ArrayList) 리스트자료구조에서 리스트는 구현 방법에 따라서 순차 리스트(ArrayList)와 연결 리스트(LikedList)로 나뉜다. 순차 리스트는 배열을 기반으로 구현된 리스트이고, 연결 리스트는 메모리의 동적 할당을 기반으로 구현된 리스트이다. 배열 기반 리스트의 단점* 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능하다.* 삭제의 과정에서 데이터의 이동(복사)가 매우 빈번히 일어난다. 배열 기반 리스트의 장점* 데이터의 참조가 쉽다. 인덱스 값을 기준으로 어디든 한 번에 참조가 가능하다. 리스트의 ADT  List 자료구조의 ADT * void ListInit(List * plist); - 초기화할 리스트의 주소 값을인자로 전달한다. - 리스트 생성 후 제일 먼저 호출되어야 하는 함수이다. * void ..
#05 재귀- 하노이탑 하노이 탑(Tower of Hanoi) 알고리즘 이해하기하노이 탑(Tower of Hanoi)은 수학적 퍼즐로, 세 개의 막대와 여러 개의 크기가 다른 원판으로 구성됩니다. 퍼즐의 목표는 한 막대에 쌓여 있는 원판들을 다른 막대로 옮기는 것입니다. 이 과정에서 다음 규칙을 준수해야 합니다:한 번에 하나의 원판만 옮길 수 있습니다.원판은 항상 큰 원판이 작은 원판 아래에 위치하도록 옮겨야 합니다.세 번째 막대를 이용하여 중간 과정을 거칠 수 있습니다.하노이 탑 알고리즘 구현하노이 탑 문제를 해결하기 위해 재귀 알고리즘을 사용합니다. 다음은 C 언어로 구현한 예제 코드입니다:#include void Hanoi(int num, char from, char by, char to) { if (num == 0..
#04 재귀를 이용한 팩토리얼 계산 재귀 (Recursion)재귀(recursion)는 어떠한 것을 정의할 때 자기 자신을 참조하는 것을 뜻합니다. 컴퓨터 과학과 수학에서, 재귀는 함수가 자신의 정의에 의해 정의될 때의 개념을 가리킵니다.#include void count(int num) { printf("%d \\n", num); count(num - 1); } int main() { count(5); return 0; }위 count() 메서드처럼 자기 자신을 호출하는 것이 재귀입니다.재귀의 탈출 조건위 코드를 보면 무한히 호출됩니다. 탈출 조건을 줘서 무한 반복을 끊어내야 합니다.#include void count(int num) { if (num == 0) return; ..
#03 순차 탐색 알고리즘, 이진 탐색 알고리즘, 이진 탐색 재귀 순차 탐색(Linear Search)맨 앞에서부터 순서대로 탐색을 진행하는 알고리즘이기에 순차 탐색이라는 이름이 붙어있다.순차 탐색 알고리즘을 구현해보자. 배열 arr1237912212327idx0idx1idx2idx3idx4idx5idx6idx7idx8 위 배열에서 3을 찾아본다면 * 첫번째 시도1. idx0번이 3인지 확인↓        1237912212327idx0idx1idx2idx3idx4idx5idx6idx7idx8 * 두번째 시도1. idx1번이 3인지 확인 ↓       1237912212327idx0idx1idx2idx3idx4idx5idx6idx7idx8 * 세번째 시도1. idx2번이 3인지 확인  ↓      1237912212327idx0idx1idx2idx3idx4idx5idx..
#02-1 빅-오에 대한 수학적 접근 두 개의 함수 f(n)과 g(n)이 주어졌을 때, 모든 n >= K에 대하여 f(n)  * f(n) = 5n^2 + 100* g(n) = n^2 이 상황에서 f(n) = 12 꼭 12가 아니여도 된다 적당한수를 정하였다.) 위 가정을 대입해보면f(n)      5n^2 + 100  빅-오의 정의에 해당하는 C와 K가 3500, 12로 각각 존재하니 5*n^2 + 100의 빅-오는 n^2이다.f(n) = 5 * n^2 + 100  =>  O(n^2) 지금까지 전개한 내용을 빅-오의 정의와 연결시켜 보면 "두 개의 함수 f(n)과 g(n)이 주어졌을 때"=> 두 개의 함수 f(n) = 5 * n^2 + 100, g(n) = n^2이 주어졌을 때"모든 n >= K에 대하여"=> 모든 n >= 12 에 대하여,..
#02 알고리즘의 성능분석 방법 복잡도(Complexity)란? 복잡도라고 말하면 이름 그대로 정말 복잡해 보이지만 그냥 어떤 알고리즘이 효율적인지를 판단하는 척도 알고리즘의 성능과 효율성을 나타내는 기준. 크게 시간 복잡도(Time Complexity)와 공간 복잡도(Space Complexity)로 나눌 수 있다. 알고리즘에 주어진 입력T(n)을 기준으로 수행시간 혹은 메모리 사용공간이 얼마나 되는지 객관적으로 비교할 수 있는 기준을 제시한다. 복잡도를 나타내는 방법으로는 점근 표기법으로 O(빅오), Ω(오메가), Θ(세타) 등이 있고, 주로 빅오와 세타 표기법이 많이 사용된다. 시간 복잡도(Time Complexity)와 공간 복잡도(Space Complexity) 시간 복잡도(Time Complexity): 수행시간 분석결과 공..
#01 자료구조(Data Structure) 와 알고리즘(algorithm) 자료구조란? 데이터를 표현하고 저장하는 방법. 프로그래밍에서 자료구조(Data Structure)는 데이터를 조직화하고 저장하는 방법이나 메모리 내에서 데이터에 효율적으로 액세스하는 방법을 제공하는 데 사용되는 방법론이다. 자료구조는 데이터를 저장, 조작, 검색 및 정렬하는 데 필요한 알고리즘을 구현하는 데 중요한 역할을 한다. 자료구조는 다양한 형태로 나타날 수 있으며, 각각의 형태는 특정한 작업이나 문제를 해결하는 데 더 나은 성능을 제공할 수 있다. 일반적으로 사용되는 자료구조에는 배열, 연결 리스트, 스택, 큐, 트리, 그래프 등이 있다. 각각의 자료구조는 다양한 연산을 지원하며, 이러한 연산은 데이터를 삽입, 삭제, 검색, 정렬하는 등의 작업을 포함할 수 있다. 효율적인 자료구조의 선택은 프로그..