C++ 120

[강의] 12월 4일 수업정리

LinkedList에 대한 수업을 들었다.  1. 연결 리스트 ( LinkedList )1.1 ArrayList와의 차이점 1.1.1 메모리 관리ArrayList: 메모리 크기를 미리 지정하고, 필요 시 배열 크기를 조정한다.LinkedList: 메모리 크기를 미리 정하지 않고, 데이터가 추가될 때마다 동적으로 메모리를 할당한다.1.1.2 구조ArrayList: 연속된 메모리 블록에 데이터를 저장하며, 인덱스를 통해 빠르게 접근 가능하다.LinkedList: 노드로 구성되며, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 포함한다.1.1.3 인덱스 접근ArrayList는 인덱스를 통해 데이터에 직접 접근 가능하다.LinkedList도 특정 구현에서 인덱스를 사용할 수 있지만, 실제로는 순차적으로 노드..

C++ 2024.12.05

[강의] 12월 3일 수업정리

링크드 리스트에 대한 수업을 들었다. 1. 연결 리스트 ( Linked List )1. 연결 리스트연결 리스트, 링크드 리스트는 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다.이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 당담하게 된다. 2. 연결 리스트 종류 단일 연결 리스트이중 연결 리스트 3. 시간 복잡도 연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖는다.그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는데에는 O(n)의 시간이 걸리는 단점도 갖고 있다. 4.  그림 예시 어떤식으로 연결이 되며 어떤식으로 그림..

C++ 2024.12.04

[강의] 11월 28일 수업정리

오늘은 heap구조에 대한 수업을 들었다. 1. HEAP 구조1. HEAP 구조란완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다.여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다.힙은 일종의 반정령 상태를 유지하며 큰 ㄱ밧이 상위 레밸에 있고 작은 값이 하위 레밸에 있다는 정도이며 간단히 말하면 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰(작은) 이진 트리를 말한다.힙 트리에서는 중복된 값을 허용한다 ( 일반 적인 이진 탐색 트리에서는 중복된 값을 허용하지 않음. ) 1.2 HEAP 구조 예시// heap.h#pragma once#include class C_HEAP{private: int m_arData[11]; int m_nLastInde..

C++ 2024.11.29

[강의] 11월 27일 수업정리

다른 방식으로 이진 검색 알고리즘, 힙 구조에 대한 간단한 내용에 대한 수업을 들었다. 1. 이진 검색 1.1 배열 초기화에 대한 오해 배열의 초기화와 관련하여 오해하는 부분이 존재한다.특히, 배열의 인덱스를 -1로 초기화하는 경우가 이에 해당이 되는데. 요세는 배열의 0번지를 의도적으로 비워두고 "값 없음" 으로 있고 없고를 판단하는 방식으로 사용한다.하지만 -1로 초기화를 하는 경우 조건이 존재하는데 일반 int형이 아닌 unsigned int형을 사용해야한다. 이것이 핵심이다. 1.2 low, high를 이용하여 이진 검색 #include int main(){ int arData[40]{}; for (int i = 0; i = nLow && !nFind) { nMiddle = (nLow + nHi..

C++ 2024.11.27

[강의] 11월 26일 수업정리

오늘은 이진 검색 알고리즘에 대한 수업을 들었다. 1. 이진 검색 알고리즘오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다. 이진 검색은 정렬된 리스트에서만 사용할 수 있다는 단점이 존재하지만, 검색이 반복될 때마다 검색 범위가 절반으로 줄기 떄문에 속도가 빠르다는 장점이 있다 ( log n )  1.1 포인터와 길이를 이용하여 이진 검색 알고리즘 #include int main(){ int arData[40]{}; int nData{}; for (int i = 0; i 0 && pData[nFindIndex] != nData) { if (pData[nFindIndex] ..

C++ 2024.11.27

[강의] 11월 22일 수업정리

오늘의 수업은 재귀 함수에 대한 수업이었다. 1. 재귀 함수  1.1 재귀와 반복보통 재귀와 반복이 많이 비교가 된다. 우리가 흔히 사용하는 for문이나 while문과 같은 반복 연산을 가리킨다.항상 그런 것은 아니지만 많은 경우에 재귀로 처리할 수 있는 문제는 반복으로도 처리할 수 있고 반대로 반복으로 처리할 수 있는 것은 재귀로 처리할 수 있다. 어떤 방법으로 문제를 해결하느냐는 프로그래머의 마음이지만 때로는 반복코드보다 재귀 코드를 사용했을 때 더 이해하기 쉬운 코드가 될 때가 있다. 그러므로 우리는 두 가지 방법을 모두 명확하게 알고 있어야 한다.   1.2 재귀 함수 재귀 함수란 자기 자신을 호출하여 작업을 수행하는 함수이다.재귀는 단순히 반복문처럼 동작한다고 이해해서는 안 된다. 함수가 호출될..

C++ 2024.11.23

[강의] 11월 21일 수업정리

오늘은 디버그에 대한 수업을 들었다. 1. 단축키 F9: 브레이크 포인트 설정/해제.F10: 다음 줄로 실행(함수 내부 진입 X).F11: 함수 내부로 진입하며 실행.F5: 브레이크 포인트까지 실행(브레이크 포인트 없으면 끝까지 실행).Shift + F11: 함수 내부에서 나옴(되돌림 아님, 전체 실행 후 나오는 것).레이아웃 되돌리기: 레이아웃 문제 시 원래대로 복구. 2. 디버그 모드  2.1디버그 모드와 릴리스 모드 차이 릴리스 모드: 디버깅 불가능. 최적화된 실행 모드.디버그 모드: 오류 검출 및 디버깅 용이. 디버깅 전용 환경. 2.2 디버그 창에서의 주요 기능 2.2.1 호출 스택(Call Stack) [ 핵심 ] 위치 :디버그 창 오른쪽 하단.역할:함수 호출 순서 추적.잘못된 값의 출처 확인..

C++ 2024.11.21

[강의] 11월 20일 수업정리

오늘은 빅오 데이터와 버블 정렬에 대한 수업을 들었다.1. 빅 오 데이터1.1 빅오(Big-O)의 의미시간 복잡도(Time Complexity): 알고리즘이 실행되는 속도를 표현. 가장 많은 작업(연산)을 요구하는 반복문의 구조를 기준으로 측정.예를 들어, 반복문의 횟수와 데이터 크기의 관계를 따진다. 1.2 주요 빅오(Big-O) 표기법O(1): 데이터 크기에 관계없이 항상 일정한 작업을 수행 (예: 단순 변수 접근).O(n): 데이터의 크기(n)에 비례하여 작업이 늘어남 (예: 단일 반복문).O(log n): 데이터 크기를 반복적으로 반으로 나누는 방식 (예: 이진 탐색).데이터의 개수를 반씩 줄이는 방식이므로, 데이터 크기(n)가 2배가 되면 작업 횟수는 한 번만 증가.O(n²): 이중 반복문처럼 ..

C++ 2024.11.21

[강의] 11월 19일 수업정리

오늘은 선택 정렬과 삽입정렬에 대한 수업을 들었다. 1. 암기 단일 원소 배열은 이미 정렬된 배열이다.원소가 하나뿐인 배열은 비교 대상이 없으므로 항상 정렬된 상태로 간주한다.선택 정렬, 삽입 정렬 등과 같은 정렬 알고리즘은 원칙에 따라 구현한다.알고리즘에 명시된 단계들을 그대로 따라 작성해야 한다.불필요하게 복잡하게 만들지 말고, 기본 원칙을 준수하며 구현한다.코드를 볼 때는 핵심 로직을 파악한다.알고리즘의 중요한 흐름(핵심 로직)을 먼저 이해하고, 이를 중심으로 코드의 구조를 해석하거나 작성한다. 2. 선택 정렬2.1 핵심 로직 첫 번째 자료를 두 전째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지 차례대로 비교하여..

C++ 2024.11.20