메모리구조 영역의 구분 정적할당과 동적할당을 담당하는지 여부에 따라 영역을 구분합니다. 정적할당의 경우 text segment과 bss segment, data segment가 담당하고 동적할당의 경우 stack segment과 heap segment가 담당합니다. 정적할당 정적할당이란 컴파일 단계에서 메모리를 할당하는 것입니다. text segment(텍스트 영역) text segment은 메모리에 올라간 실행 중인 프로그램의 영역입니다. text segment은 실행 가능한 instruction들이 들어가 있습니다. 텍스트 영역은 오작동을 막기 위해 읽기만 가능합니다. initialized data segment(초기화 된 데이터 영역) 전역변수와 정적 변수 중에 초기화 된 변수들이 존재하는 영역을 ..
다익스트라 알고리즘 개념 사용환경 가중치 그래프에서 시작점과 도착점이 주어졌을 때 최단 경로를 찾는 알고리즘 원리 방문할 수 있는 노드 중에 가장 비용이 작은 곳(우선순위가 높은 곳)을 방문 1. 우선순위 큐에 시작노드 추가 2. 우선 순위가 가장 높은 노드 추출 3. 방문 여부 확인 4. 비용 업데이트 5. 현재노드와 연결된 노드를 우선순위 큐에 추가 6. 목적지에 기록 된 비용 반환구현 다익스트라 알고리즘 import heapq def dijkstra(graph, start, final): costs = {} pq = [] heapq.heappush(pq, (0, start)) while pq: cur_cost, cur_v = heapq.heappop(pq) if cur_v not in costs: ..
우선순위큐 개념 정의 우선순위큐는 들어온 데이터의 우선순위에 따라 데이터를 꺼내는 자료구조입니다. 큐는 들어온 순서에 따라 데이터를 꺼내는 반면에 우선순위큐는 우선순위에 따라 데이터를 꺼냅니다. 우선순위 큐는 3가지 방식으로 구현할 수 있습니다. ① 배열 ② 연결리스트 ③ 힙으로 구현할 수 있습니다. 배열과 연결리스트의 경우, 정렬의 유무에 따라 데이터 처리의 시간복잡도가 O(N) ~ O(NlogN)이나 힙의 경우 O(logN)으로 동일합니다. 따라서 우선순위큐는 힙으로 구현합니다. 힙 자료구조 구현 힙 자료구조는 완전이진트리의 한 형태로 리프노드를 제외한 모든 노드들이 점유되어 있고 자식노드는 왼쪽부터 채워지는 구조입니다. 완전이진트리의 특징은 다음과 같습니다. 1. 리프노드를 제외한 모든 레벨에 노드..
#1 포인터란?변수의 메모리 주소를 저장하는 변수다. 포인터는 주소를 통해 데이터를 공유를 할 수 있게끔 도와준다.포인터 선언변수의 자료형에 따라 포인터의 자료형이 결정된다.char *p; // 포인터 p의 자료형: char*#2 포인터와 연산변수의 주소주소연산자(&)를 통해 변수의 주소를 반환받을 수 있다.int a = 123;int *p = &a; // 변수의 주소 받기포인터로 값 접근 · 변경역참조 연산자로 주소가 보관하는 값에 접근하고 값을 변경할 수 있다.// 값 접근int a = 456;int *p = &a;cout 변수 출력시 값이 변경 된 걸 확인할 수 있다.주소를 10진수로 표현하기포인터는 주소값을 저장한다. 주소값은 16진수 형태다. 10진수 형태로 표현하면 보기가 편하다.int a =..