전체 글 143

[프로그래머스 Lv3] N으로 표현

문제 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5)12 = 55 / 5 + 5 / 512 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 입출력 예 입출력 예 설명 예제 #1문제에 나온 예와 같..

[프로그래머스 Lv3] 가장 먼 노드

문제 설명 n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다. 노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요. 제한사항 노드의 개수 n은 2 이상 20,000 이하입니다. 간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다. vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다. 입출력 예 n verte..

JobTimer

이전글https://ddukddaksudal.tistory.com/85 JobQueue JobQueue 란? JobQueue는 처리해야 할 일들을 작업(Job/Task)이라는 단위로 만들고, 그 작업들을 대기열(Queue)에 넣고, 그 대기열에서 작업들을 꺼내서 처리하는 방식을 말한다. 쉽게 말하면 어떤 해야할 ddukddaksudal.tistory.com 이 글은 이전 글에 이어지는 내용입니다. JobTimer JobTimer는 즉시 실행되는 것이 아니라, 일정시간 뒤에 실행되길 바라는 Job들을 관리하는 것이다. 주요 아이디어는 예약 실행할 Job들만 따로 모아서 지속적으로 시간을 체크하며 실행 시간이 된 Job들은 기존의 JobQueue에 Distribute(분배)해주는 것이다. 아래는 그 과정을 ..

JobQueue

JobQueue 란? JobQueue는 처리해야 할 일들을 작업(Job/Task)이라는 단위로 만들고, 그 작업들을 대기열(Queue)에 넣고, 그 대기열에서 작업들을 꺼내서 처리하는 방식을 말한다. 쉽게 말하면 어떤 해야할 일이 생겼을 때, 그 일을 바로 해버리는 것이 아니라. 일 목록을 만들어 적어놨다가 나중에 목록에 적힌 일들을 처리하는 것이다. 왜 그렇게 할까? JobQueue를 사용하는 이유는 어떤 작업이 생겼을 때, 그 작업을 기록해놨다가 다른 사람에게 떠넘길 수 있기 때문이다. 이는 멀티쓰레드 환경에서 엄청난 장점으로 작용할 수 있다. 아래 상황을 상상해보자. JobQueue가 없는 상황 어떤 식당이 있다. 그 식당에는 여러명의 유능한 직원이 있다. 각 직원들은 요리부터 서빙 그리고 카운터 ..

Google Protocol Buffer

Google Protocol Buffer는 Google에서 개발한 오픈소스 직렬화 데이터 구조다. 다양한 곳에서 데이터 직렬화를 위해 쓰이고 있다. 간단히 ProtoBuf라고도 부르는 모양이다. 쉽게 설명하자면 .proto라는 파일로(XML 혹은 JSON 같은) 데이터 구조를 짜면, 원하는 프로그래밍 언어로 해당 데이터 구조를 다루는 코드를 자동 생성해주는 프로그램이다. 예를 들면 C++의 struct를 자동으로 선언해주고, 그 struct의 임시 객체를 생성하고, 직/역직렬화 하는 등 여러 편리한 기능을 구현한 코드들이다. 설치 따라하기 Google ProtoBuf를 사용하는 과정은 처음 해보면 굉장히 복잡하게 느껴질 수 있다. 그러나 알고나면 그냥 porotobuf을 한 번 돌리고 생성된 헤더, 소스..

문자 집합(Character Set)

문자 집합이란? 이진 정보를 특정 문자로 변환(해석)할 때, 그 기준이 되는 표를 의미한다. 대표적으로 가장 초기에 만들어진 'ASCII table'가 있다. 컴퓨터는 0과 1로 이루어진 데이터를 문자로 해석하기 위해 이 표를 적절히 참고한다. 예를 들어 '0x43 0x44' 라는 이진 정보가 있을 때, 컴퓨터가 이 것을 ASCII table 문자 집합을 이용하여 문자열로 해석하면 'CD' 가 된다. 환경에 따라 ASCII table가 아닌 다른 문자 집합을 사용할 수도 있다. 다른 문자 집합의 예로는 현재 가장 널리 쓰이는 'Unicode', 한국 산업 규격으로 지정된 'KS X 1001' 등이 있다. Unicode Unicode는 현재 가장 널리 쓰이는 문자 집합이다. 어떤 구성인지 알아보자. 유니코..

CS 2022.07.04

네트워크 라이브러리

파일 목록 IocpCore.cpp/h : IocpCore 형 글로벌 변수 GIocpCore 선언. IocpEvent.cpp/h Listener.cpp/h NetAddress.cpp/h Session.cpp/h SocketUtils.cpp/h Service.copp/h 클래스 목록 IocpCore : Completion Port(이하 CP) 의 Handle(_iocpHandle)을 멤버로 가지고 있으며, 이를 관리하는 클래스. 생성자 : CreateIoCompletionPort 함수로 CP를 생성, _iocpHandle에 할당. GetHandle() : _iocpHandle을 반환 Register() : CreateIoCompletionPort 함수로 Listener 소켓과 CP를 연결해주는 함수 Disp..

Completion Port 모델

IOCP Completion Port 모델은 Completion Port를 활용해 비동기 함수의 완료 통지를 받는 네트워크 모델이다. Overlapped 모델보다 멀티 쓰레드를 활용하기 좋다. Completion Port(이하 CP)란 무엇인가? CP란 비동기 입출력 작업의 완료를 통지해주는 녀석이다. 동작 방식만 보면 마치 Overlapped 모델의 APC 큐와 비슷한데, 큰 차이점은 하나의 쓰레드에서 발생한 콜백만 처리할 수 있는 APC 큐와는 달리, 모든 스레드에서 공용으로 사용할 수 있다는 점이다. 이 CP를 활용하는 방법은 대략 아래와 같다. CP를 생성함. 비동기 입출력 함수를 호출함. 새로운 쓰레드를 생성하여 CP가 완료 통지를 보내주길 기다리도록 함. CP는 비동기 입출력 함수가 완료되면 ..

Overlapped 모델(콜백함수)

콜백함수 기반 Overlapped 모델에 대해 알아보자. 이벤트 기반 Overlapped 모델과 달리 콜백함수를 통해 Send, Recv 동작 완료 통지를 받는 방식이다. 즉 이벤트 기반 Overlapped모델에서 이벤트 관련 부분을 떼고, 비동기 통신 함수의 마지막 매개변수에 콜백함수를 전달해주는 부분을 붙이면 그것이 콜백함수 기반 Overlapped 모델이다. 이벤트 기반 Overlapped모델이 비동기 블로킹 방식이었다면, 이 모델은 비동기 논블로킹 방식이라고 할 수 있다. 콜백(Call back)함수 콜백함수 기반 Overlapped 모델에 대해 알아보기 전에, 우선 콜백함수에 대해 알아볼 필요가 있다. 콜백 함수란 어떤 이벤트가 발생했을 때 호출되는 함수이다. 여기서는 비동기 입출력 함수(WSA..

WSAEventSelect model

WSAEventSelect 모델이란 지난 번에 썼던 Select 모델과 같이 소켓 입출력 시 성공할 때까지 대기하거나 재시도하는 상황을 해결해주는 방법이다. 그러나 Select 모델과 달리 이벤트 객체를 생성해서 소켓을 관리해준다. 또한 Select모델과 달리 매 번 감시 소켓 목록을 초기화하는 등의 작업이 필요 없다. 또한 동기 방식이었던 Select 모델과 달리 비동기 방식의 모델이다. 여기서 말하는 이벤트란 커널에 존재하는 비트 플래그 같은 것이다. 커널에 bool 형 변수가 있고, 이를 껐다가 켰다가 (Signal, NonSignal 상태) 하면서 그 상태를 통지받는다고 생각하면 된다. 함수들 WSACreateEvent : 이벤트 생성 WSACloseEvent : 이벤트 삭제 WSAWaitForM..