목록💯🌊자료구조&알고리즘 (6)
컴퓨터공학 💻 도서관📚
이중연결리스트를 이중 포인터로 선언할 수 도 있지만이중연결리스트 구조체를 따로 선언해서 구현하는 것이 가독성과 유지보수에 더 좋다. * 노드 삽입 함수가 유형이 두개 : 앞쪽에 노드 삽입 , 뒤쪽에 노드 삽입#include #include // 노드 구조체 정의typedef struct Node { int data; struct Node* prev; struct Node* next;} Node;// 이중 연결 리스트 구조체 정의typedef struct { Node* head; // 리스트의 첫 번째 노드} DoublyLinkedList;// 리스트 초기화void initList(DoublyLinkedList* list) { list->head = NULL;}// 앞쪽에..

* 단일 연결 리스트의 구조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 과 시간..