반응형

분류 전체보기 622

POSIX Docker 설치와 Ubuntu 환경 세팅

개요POSIX환경에서의 소켓 통신을 구현하기 앞서 Linux환경의 세팅을 Docker를 통해 진행해 준다. https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.www.docker.com 위 사이트를 방문하여 자신의 OS 환경에 맞는 Docker Desktop을 다운로드 해준다.나는 인텔 칩을 사..

[G5] 백준 2504번 괄호의 값 C++ 스택

리뷰 https://www.acmicpc.net/problem/2504스택 문제인건 알겠으나 괄호의 배치에 따른 정답 연산에 애먹은 문제  전역 변수s : 입력되는 괄호의 정보를 저장할 문자열 변수stack : 괄호의 여닫기를 체크하기 위해 스택으로 사용할 문자 타입의 벡터 함수없음  문제풀이괄호로 이루어진 문자열을 s에 입력 받아준다.정답을 출력할 변수 ans를 0으로, 시뮬레이션에 사용할 변수 temp를 1로 초기화 한다.문자열 s의 길이만큼의 반복문을 실행해 준다.만약 s[i]가 '(', '['라면 temp에 2배, 3배를 곱해주고 스택에 괄호를 추가해 준다.만약 s[i]가 ')'라면 우선 스택이 비어있거나 스택의 맨 위가 '('가 아니라면 탐색을 중지하고 0을 출력한다.맞다면 s[i - 1]이 '..

Boost.asio 실시간 채팅 AWS EC2 서버 구현

개요클라이언트가 채팅 서버에 접속하고, 각자 닉네임을 생성한 후에 실시간으로 다른 클라이언트와 채팅을 통해 소통하는 소켓 통신을 구현해 보자로직은 다음과 같다.클라이언트가 서버로 연결 요청을 한다.서버가 연결 요청을 수락한다.클라이언트가 사용할 닉네임을 설정하고 이를 서버에 쓰기 연산을 한다.서버에서 해당 클라이언트의 닉네임을 읽고 기억한다.클라이언트가 동기 쓰기 연산을 통해 하고싶은 말을 서버로 출력한다.서버가 클라이언트로 부터 받은 데이터를 읽고 현재 연결되어 있는 모든 클라이언트에게 데이터를 보낸 클라이언트의 닉네임을 사용하여 쓰기 작업을 한다.모든 클라이언트에서 서버로 부터 받은 데이터를 읽는다. AWS EC2 서버서버는 Linux 환경에서 구현한다, 물론 클라이언트도 구현 할것이다.AWS EC2..

[G4] 백준 4803번 트리 C++ BFS, 트리, 싸이클

리뷰 https://www.acmicpc.net/problem/4803싸이클이 발생했다는 것에 대한 재정의를 하게 된 문제  전역 변수n : 노드의 개수를 저장할 변수m : 간선의 개수를 저장할 변수ans : 트리의 개수를 저장할 변수v : 각 노드의 방문 처리를 하기 위한 정수형 배열  함수1. bfsbool bfs(int sn, const vector>& lst) 너비 우선 탐색을 통해 싸이클 존재 여부를 판단하기 위한 함수매개 변수로 시작 노드와 인접 리스트를 전달 받는다.정수형 타입 큐 q를 초기화 하고 시작 노드를 큐에 삽입해 준다.시작 노드를 1로 방문처리 해주고, 트리 여부를 판단할 bool 형식의 변수 isTree를 true로 초기화 한다.큐가 빌 때 까지 탐색을 진행하고 큐의 제일 앞에 ..

[G4] 백준 1339번 단어 수학 C++ 그리디 알고리즘, 우선순위 큐, 해시맵, 문자열

리뷰 https://www.acmicpc.net/problem/1339그리디 알고리즘 치곤 여러가지 알고리즘과 자료구조를 혼합하여 푼 문제  전역 변수n : 주어지는 문자열의 개수values : 각 문자가 어떤 숫자로 파싱될지를 결정하기 위한 배열dic : 각 문자의 가중치를 저장하기 위한 해시맵words : 각 문자의 원본을 저장하기 위한 문자열 타입 배열Prio : PQ에서 우선순위 순으로 정렬하기 위한 구조체 함수없음  문제풀이n값을 입력 받고 n번의 반복문을 실행하여 각각 문자열을 문자열 변수 s에 저장해 준다.words배열에 s를 기록해 주고, s를 반전시켜 각 문자를 키로 값을 10^i 만큼 더해준다.Prio타입 우선순위 큐 pq를 초기화 해주고, dic를 순회하며 pq에 dic의 key와 v..

메모리 풀(Memory Pool)

개요메모리를 동적으로 할당하고 해제하는 과정에서 성능을 최적화하기 위한 기술일반적으로 동적 메모리 할당이 자주 일어나는 시스템에서 성능 문제를 해결하려고 사용된다.메모리 풀은 메모리 블록을 미리 할당해두고 필요한 곳에서 이를 재사용하는 방식으로 동작한다.메모리 풀을 사용하면 메모리 할당과 해제의 비용을 줄일 수 있다.  장점동적 메모리 할당과 해제를 반복적으로 호출하는 경우, 시스템에 의한 오버헤드가 발생한다.동적 메모리 할당이 반복되면 메모리 단편화가 발생할 수 있다.하지만 메모리 풀을 사용하면 이러한 오버헤드와 단편화를 감소 시킬 수 있다. 또한 메모리 풀은 고정된 크기의 블록을 사용하기 때문에 메모리 사용량을 예측할 수 있다.  동작 원리메모리 풀은 미리 일정량의 메모리 블록을 할당한다, 따라서 크..

자료 구조 2024.11.21

[G5] 백준 1240번 노드사이의 거리 C++ LCA, 트리

리뷰https://www.acmicpc.net/problem/1240간선에 가중치가 있는 트리로 이루어진 자료 구조에서 주어진 노드간 거리를 계산하는 문제N, M의 최대 값이 작아 DP를 활용한 LCA를 굳이 안해도 되었지만 복기를 할 겸 해당 방법으로 시도하였다.결국엔 반복문에서 LOG 값을 잘못 설정하여 OOB를 두번 받았다, 꾸준히 연습하는게 중요한 것 같다.  전역 변수LOG : 부모를 비트단위 DP로 체크하기 위한 최대값N : 노드 번호의 최대값n : 문제에 주어지는 노드의 개수, 1부터 시작m : 문제에 주어지는 쿼리문의 개수depth : 각 노드의 트리에서의 깊이를 저장할 정수형 배열cost : 각 노드의 루트로 부터 가중치를 저장할 정수형 배열parent : 각 노드의 부모 정보를 저장하기..

Boost.asio 비동기 TCP 서버

개요비동기 TCP 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.비동기 I/O 및 제어 연산을 한다.한 번에 여러 클라이언트를 처리할 수 있다.일반적인 비동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.비동기 수용 연산을 시작하도록 한다.하나 이상의 스레드를 만들어 Boost.asio 이벤트 루프를 실행시키는 스레드 풀에 추가한다.비동기 수용 연산이 끝나면, 다음 연결 요청을 받아들이는 새로운 연산을 시작하도록 한다.비동기 읽기 연산을 시작시켜 연결된 클라이언트로부터 들어오는 요청을 읽는다.비동기 읽기 연산이 끝나면, 요청을 처리하고..

Boost.asio 병렬 동기 TCP 서버

개요병렬 동기 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.클라이언트를 한 번에 하나 이상 처리할 수 있다.일반적인 병렬 동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.서버가 중단될 때까지 루프를 돈다.클라이언트로부터 연결 요청이 오기를 기다린다.연결 요청이 오면 받아들인다.스레드를 새로 생성하고 새 스레드에서 다음과 같은 작업을 한다.클라이언트로부터 요청 메시지가 오기를 기다린다.요청 메시지를 읽는다.요청을 처리한다.클라이언트에게 응..

[G5] 백준 2470번 두 용액 C++ 투 포인터, 정렬

리뷰 간단한 이분탐색 문제  전역 변수n : 주어지는 수열의 길이o, t : 섞었을 때 0과 가장 가까운 두 용액을 저장할 변수ans : 여태 까지 나온 0과 가장 가까운 수를 저장하기 위한 변수lst : 수열의 정보를 입력받기 위한 정수형 배열 함수없음  문제풀이n값을 입력 받고, 길이가 n인 수열의 정보를 lst에 입력 받아준다.lst의 요소를 오름차순으로 정렬해 준다.l, r을 각각 수열의 맨 앞과 맨 뒤의 인덱스로 지정해 준다.l과 r이 동일해 질 때까지 반복문을 실행한다.lst의 l, r인덱스의 값을 더한 값을 정수형 변수 val에 저장해 준다.val의 절대값이 ans의 절대값보다 작다면 ans를 val로 저장하고, o를 lst[l]로, t를 lst[r]로 변경해 준다.이후 val이 0보다 크다..

728x90
반응형