1. 포인터 정의: 메모리 주소를 저장하는 변수로, 실행중인 프로세스의 임의 주소에 접근 할 수 있게 한다.포인터를 이용하여 프로세스의 원하는 영역에 접근 가능하다. 포인터 자료형종류: 포인터 변수, 배열 포인터, 포인터 배열, 함수 포인터, 다중 포인터, void형 포인포인터 변수: 다른 변수의 메모리 주소를 저장하는 변수배열 포인터: 배열의 첫 번째 요소의 주소를 가리키는 포인터 ex) int (*arrPtr)[10]; (10개의 정수를 가진 배열을 가리키는 포인터)포인터 배열: 포인터를 요소로 가지는 배열 ex) int *ptrArray[10]; (정수형 포인터 10개를 가진 배열)함수 포인터: 함수를 가리키는 포인터 ex) void (*funcPtr)(int); (정수를 인자로 받는 함수 포인터)..
전체 글
배열하나의 이름으로 참조되는 같은 자료형을 갖는 데이터들의 집합(메모리의 연속적인 공간)int count[10]; //배열 선언count[0] = 100, count[1] = 200; //배열원소에 값 할당 초기화배열은 선언을 하고 초기화를 해야 한다. 또한 선언과 동시에 값을 초기화할수 있다. 배열을 선언하고 초기화하지 않으면, 스택 영역에 할당된 배열은 쓰레기 값을 저장한다.int count[5] = {10, 20, 30, 40, 50};# 배열 초기화 시 원소 수보다 적은 인수를 사용하면, 나머지 영역은 0으로 초기화된다.int arr[5] = {1,2,3}; 배열은 메모리에 연속적으로 할당 받는다.원소의 값 사용 시 배열변수[첨자] 원소 주소 사용 시 &배열변수[첨자]#include int mai..
배울 것변수 범위, 메모리 할당구조전역변수, 지역변수 차이static수정자, extern수정자 1. 변수와 메모리 저장 위치 메모리 할당 구조코드 영역: 프로그램 실행 코드 저장데이터 영역 (한번만 초기화)데이터: 초기화된 전역 변수, 정적 변수 저장BSS: 초기화되지 않은 전역 변수, 정적 변수 저장힙 영역: 동적 메모리 할당 영역스택 영역: 함수 호출 시 지역변수, 매개변수 저장 (매번 초기화) 스택 vs 데이터 데이터변수 할당시 프로세스 종료까지 변수 영역 유지프로그램 종료될 때까지 변수는 값 유지 변수가 할당된 영역은 항상 0부터 시작스택재활용되는 공간지역변수는 생성과 소멸 반복변수 할당 영역은 0을 보장받지 못한다. 2. 변수의 종류 지역변수스택영역에 저장개념: 함수 내에 선언되며, 함수가 호..
집합이란?개념: 순서와 중복이 없는 원소들을 갖는 자료구조종류: 유한 집합, 무한 집합 등, 중요한 것은 상호배타적 집합상호배타적 집합: 교집합이 없는 집합 관계이를 활용하여 이미지 분할, 최소 신장트리 알고리즘 구현, 클러스터링 작업 등이 가능하다. 집합의 연산 배열을 활용한 트리로 표현대표 원소: 집합을 대표하는 원소 -> 루트 노드를 생각하자하나의 배열로 상호 배타적 관계를 가지는 집합을 모두 표현한다. 집합을 트리로 변경 시 "배열의 값=인덱스의 부모노드"ex) set[9] = 3 -> 9의 부모는 3 유니온-파인드 알고리즘집합 알고리즘에 주로 쓰이는 연산: 합치기&탐색 = Union&Find -> 찾고나서 합치자 Find 연산특정 노드의 루트 노드 탐색A,B 두 노드의 루트 노드가 같다? ->..
트리 분야: 인공지능, 데이터베이스, 자동 완성 시스템 등 다양한 분야에서 사용트리는 에지로 연결된 노드로 구성된 계층 구조노드: 각 노드에는 데이터가 들어 있다.루트: 최상위 노드로, 부모가 없는 노드자식/부모: 계층적 방식으로 연결된 노드Leaf: 자식이 없는 노드.에지: 부모 노드와 자식 노드 사이의 연결 고리 코테에서는 이진 트리만 알면 된다.이진트리란 모든 노드의 최대 차수가 2를 넘지 않는 트리이진 트리는 배열이나 포인터로 구현한다. 이진 트리 배열로 표현루트 노드가 인덱스 1에 있을 경우왼쪽 자식 = 부모인덱스 * 2오른쪽 자식 = 부모인덱스 * 2 + 1루트 노드가 인덱스 0에 있을 경우왼쪽 자식 = 부모인덱스 * 2 + 1오른쪽 자식 = 부모인덱스 * 2 + 2단점: 이 표현은 배열에..
해시란?개념: 해시 함수를 사용하여 키를 값에 매핑하는 데이터 구조해시 함수는 빠른 조회를 위해 키를 변환된 값(주로 인덱스)으로 변환하여 데이터를 훨씬 빠르게 검색할 수 있게 해준다.연속 인덱스를 사용하는 기존 배열과 달리 해시는 키를 사용하여 데이터를 탐색특징단방향 액세스: 키를 사용하여 값을 찾을 수는 있지만 값에서 키를 찾을 수는 없다.상수 시간 조회(O(1)): 해시 함수는 키에서 직접 인덱스를 계산하므로 전체 데이터 집합을 검색할 필요 없이 빠르게 검색 가능변환 필요: 해시함수를 통해 키를 인덱스로 변환해야 값에 효율적으로 액세스할 수 있다.해시를 사용하지 않으면 항목을 찾기 위해 데이터 전체 검색을 수행해야 하므로 효율성이 훨씬 떨어진다. 해시 테이블 또는 버킷해싱에서 '해시 테이블' 또는 ..
큐란?큐의 ADT isfull: 큐가 꽉 차서 더 이상 데이터를 넣을 수 있는지 여부를 확인하는 함수True: 큐가 꽉 찼음False: 큐에 여유 공간이 있음isempty: 큐가 비어 있는지 확인하는 함수True: 큐가 비었음False: 큐에 데이터가 존재함push (enqueue): 큐의 rear(뒤쪽) 끝에 데이터를 추가하는 함수pop (dequeue): 큐의 front(앞쪽) 끝에서 데이터를 제거하는 함수front: 큐의 앞쪽 끝에 있는 데이터를 반환하는 함수(제거하지 않음)rear: 큐의 뒤쪽 끝에 있는 데이터를 반환하는 함수(제거하지 않음)data[maxsize]: 큐가 내부적으로 데이터를 저장하는 배열 또는 리스트와 최대 크기 maxsize 리스트를 큐처럼 -> 왼쪽에서 삽입, 삭제 가능que..
캡스톤에서 SpringBoot, MongoDB를 사용해서 백앤드 서버 개발을 해야한다.내가 인프라를 맡기로 해서 CI/CD및 인프라를 완료하였다.기록할겸 블로그에 정리해보았다.EC2는 MongoDB, SpringBoot 사용할 것이기에, 추가로 8080포트와 27017 포트를 열어주었다.그리고 t2.micro말고 t3a.small을 사용하였다. t2.micro는 너무 작다...https://start.spring.io/실행 잘 된다.이제 깃허브에 연결해주자레포지토리 생성하고git initgit add README.mdgit commit -m "first commit"git branch -M maingit remote add origin git@github.com:seongjju/seongjju-web-..