목록💯🌊자료구조&알고리즘 (8)
컴퓨터공학 💻 도서관📚

아래 코드에서는 구조체 멤버변수 size 변수가 있어서 while문이 아닌 for문으로 코드를 짤 수 있 #include #include #define MAX_SIZE 100// 집합 구조체typedef struct { int elements[MAX_SIZE]; int size;} Set;// 집합에 원소 추가 (중복 방지)void addElement(Set *set, int elem) { for (int i = 0; i size; i++) { if (set->elements[i] == elem) return; // 이미 존재하면 추가하지 않음 } if (set->size elements[set->size++] = elem; }}// 합..
#include #include // 노드 정의typedef struct Node { int data; struct Node* next;} Node;// 원형 연결 리스트 구조체typedef struct { Node* head;} CircularLinkedList;// 리스트 초기화void initList(CircularLinkedList* list) { list->head = NULL;}// 노드 생성Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode;}// 끝에 삽입void ..

이중연결리스트를 이중 포인터로 선언할 수 도 있지만이중연결리스트 구조체를 따로 선언해서 구현하는 것이 가독성과 유지보수에 더 좋다. * 새로운 노드를 생성하는 함수가 있음삽입함수 / 삭제함수가 n번째 위치에(를) 삽입 / 삭제하는 형식 이중연결리스트는 앞뒤노드와 다 연결해야 되기 때문에뒤노드가 NULL인 경우도 인지하고 있어야 한다 if(temp->next) == if( temp->next 이 참일때, 0이 아닐때 ) 그래서 뒤노드가 NULL이 아니면 뒤노드->prev = newNode 이걸 연결해 주는 거다 (앞노드->next) 이중연결리스트의 append 함수는 1번째 위치에서는 연결을..

* 단일 연결 리스트의 구조typedef struct Node { // (정체성 : struct Node) int data; // 데이터 저장 (정체성 : int) struct Node* next; // 다음 노드를 가리키는 포인터 (정체성 : struct Node *)} Node; * 단일 연결 리스트의 기본 연산1.노드 추가(Append) : 리스트의 끝에 새로운 노드를 추가하는 기능 2. 노드 삭제(Delete) : 특정 값을 가진 노드를 삭제하는 기능 3. 노드 탐색(Search) : 특정 값을 가진 노드를 찾는 기능 4. 노드 출력(Display) : 리스트의 모든 노드를 순차적으로 출력하는 기능 * 단일 연결 리스트..
예시) n 이 5일때 3번을 from 에서 tmp로 -->4번을 from 에서 tmp(임시) 로 --> 4번을 from 에서 to로 (printf) 4번을 tmp에서 to로 -->5번을 from 에서 to 로 (printf) ..
재귀함수 : 자기 자신을 호출하는 함수 재귀함수의 구조1. 종료조건 : if 문을 사용2. 재귀 : 자기 자신을 호출 (else 나 return 등을 사용) 재귀함수 예시 : 팩토리얼, 최대공약수 계산#include #pragma warning(disable : 4996)int facto(int num){ if (num == 1) // 종료조건 { return 1; } else { return num * facto(num - 1); // 재귀적 호출 }}int main(void) { int N; scanf("%d", &N); int ans = facto(N); printf("%d", ans); return 0;}* 재귀함수의 장단점장점 1. 코드의 가독성이 높아진다 (재귀적..

병합정렬은 데이터를 가장 작은 단위까지 분할한 다음 정렬하면서 다시 병합하는 알고리즘이다. 병합정렬의 시간복잡도는 O(N*logN) 이다. (약 2천만) [병합정렬 예시 1] [병합정렬 예시 2] : 데이터의 총 개수가 홀수인 경우 데이터의 총 개수가 홀수일 경우에는 분할 과정이 남았지만 더 이상 분할할 수 없는 그룹이 존재하게 된다. 이 때는 모든 분할 과정이 끝날 때까지 계속 1개의 원소를 유지합니다. 분할정복 알고리즘 : 하나의 문제를 동일한 유형의 작은 문제들로 분할한 다음에 작은 문제에 대한 결과를 조합해서 큰 문제를 해결하는 방식의 알고리즘분할 정복 알고리즘은 보통 재귀 함수로 구현된다는 특징이 있다.
결론 : 연산이 약 1억 번까지 가능하다 / 시간초과 뜨면 다른 방법을 찾아봐라. (1억 : 10의 8승 / 100,000,000)O(N) 알고리즘 : 크기가 약 1억 6천만인 입력까지를 1초 안에 풀 수 있다.O(N*logN) 알고리즘 : 크기가 약 2천만인 입력까지를 1초 안에 풀 수 있다.O(N^^2) 알고리즘 : 크기가 40960 인 입력까지를 1초 안에 풀 수 있다.O(N^^3) 알고리즘 : 크기가 2560 인 입력까지를 1초 안에 풀 수 있다. 개념) 시간복잡도는 입력의 크기와 문제를 해결하는데 걸리는 시간의 상관관계를 의미한다. 참고)https://lemonlemon.tistory.com/54 Big O notation 과 시간..