분류 전체보기 86

BFS 너비 우선 탐색

BFS : Breadth Frist Search : 너비 우선 탐색트리나 그래프에서 특정 노드를 시작으로 인접 노드를 먼저 탐색한 후, 다음 레벨로 이동하여 인접 노드를 탐색한다이러한 방법으로 모든 노드를 탐색하는 것을 BFS라고 한다 큐로 구현 가능하다 최단 경로 찾기, 최소 비용 문제, 최소 이동 or 변경 문제, 스도쿠 등에서 활용 가능하다 void bfs(int node, vector graph[], bool visited[], std::queue q){ q.push(node); visited[node] = true; while (!q.empty()) { int current = q.front(); q.pop(); std::cout ..

CS/알고리즘 2024.11.06

DFS 깊이 우선 탐색

DFS : Depth Frist Search : 깊이 우선 탐색트리나 그래프에서 특정 노드를 시작으로 다음 노드를 탐색하며 갈림길을 만나면 저장해놨다가 진행하는 루트의 끝에 도달했을 때 갈림길로 돌아가 다른 다음 노드를 탐색한다이러한 방법으로 모든 노드를 탐색하는 것을 DFS라고 한다 대표적인 예로 백트래킹이 있다백트래킹은 DFS와 동일하지만, 조건을 만족 시킬 경우에만 다음 노드로 넘어간다는 점에서 루트의 끝에 도달하는 DFS와 차이가 있다 재귀와 스택으로 구현 가능하며,재귀 형태일 때는 순환 그래프면 안된다는 제한 사항과 스택 형태일 때는 스택 오버플로우에 유의해야한다는 특징이 존재한다 경로 탐색, 그룹 찾기, 사이클 검출 등에서 활용 가능하다 재귀// 재귀 DFSvoid dfs(int node, v..

CS/알고리즘 2024.11.06

소수 구하는 알고리즘

n까지의 소수 출력하기 - 반복문소수를 판단하기 위해서 2부터 모든 수를 나눠보지 않아도 된다고 한다int n;std::cin >> n;for (int i = 2; i   - 에라토스테네스의 체 반복문보다 이게 더 빠름 2부터 n까지의 모든 수를 나열2는 소수이므로 저장하고 그 외 2의 배수들은 소수가 아니므로 지움남은 수 중 3은 소수이므로 저장하고 그 외 3의 배수들은 소수가 아니므로 지움남은 수 중 5는 소수이므로 저장하고 그 외 5의 배수들은 소수가 아니므로 지움위와 같은 과정을 반복#include std::vector sieveOfEratosthenes(int n){ std::vector isPrime(n + 1, true); isPrime[0] = isPrime[1] = false;..

언어/C++ 2024.09.12

c++ 자료형

코테 공부하는데타임아웃 때문에 고생을 너무 많이 했다나는 벡터면 다 되는 줄 알았지~  #include 순서가 없는 자료형저장을 사전 순으로 함find 명령 실행 시 log N의 속도로 검색 가능 #include 딕셔너리같은 존재저장을 사전 순으로 함키와 밸류 두가지 인자를 하나의 아이템으로 가짐 #include #include insert, erase, find 모두 O(1)의 속도로 수행 #include #include 중복을 허용하여 저장

언어/C++ 2024.09.09

모듈 프로그램

간단한 모듈 프로그램을 작성해보자 앞으로 모든 작업은 Ubuntu 20.04에서 소스 파일을 작성해 크로스 컴파일을 진행하고 생성된 모듈 프로그램을 라즈베리파이에서 실행한다 // hello.c #include #include #include static int hello_init(void) { printk("Hello, world\n"); return 0; } static void hello_exit(void) { printk("Goodbye, world\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("Dual BSD/GPL"); 커널에 모듈이 적재되면 module_init()으로 인해 hello_init이 실행되고 커널에..

리눅스에서 Qt 사용하기

https://download.qt.io/archive/qt/5.14/5.14.2/ Index of /archive/qt/5.14/5.14.2 download.qt.io 여기서 .run 파일을 다운로드하고 Qt 계정을 입력 후 설치하면 된다 vi ~/.profile 제일 아래 Qt가 설치된 디렉토리의 bin 폴더를 환경변수로 설정해주자 이런식으로 하면 됨 작성하면 source ~/.source 해당 명령어로 변경한 환경변수를 설정 폴더를 하나 생성해서 Qt 프로그램 소스코드를 작성해보자 // hello_world.cpp #include #include int main(int argc, char **argv) { QApplication app(argc, argv); QLabel *hello = new QL..

디바이스 드라이버 제어 방식

응용 프로그램의 하드웨어 제어는 위와 같은 방식으로 제어된다 응용 프로그램이 하드웨어를 제어하기 위해 저수준 파일 입출력 함수를 사용해 디바이스 파일에 데이터를 쓰거나 읽고, 그 결과로 하드웨어를 제어하는 디바이스 드라이버 함수가 호출된다 커널이 어떻게 디바이스 파일과 디바이스 드라이버의 함수를 연결할까? 방법은 디바이스 파일에 기록된 디바이스 타입과 주 번호를 이용하여 등록한다 fs/char_dev.c에 chrdevs라는 전역 변수가 struct char_device_struct chrdevs[MAX_PROBE_HASH];와 같이 정의되어 있다 해당 전역 변수는 struct file_operation *fops;라는 필드를 포함한 문자 디바이스 드라이버를 관리하는 구조체로, 응용 프로그램이 디바이스 파..