본문 바로가기

분류 전체보기

(727)
슬라이딩 윈도우. [12891] [1. 개요]https://www.acmicpc.net/problem/12891[2. 문제 풀이]동적 계획법의 개념이 일부 포함되어 있음[3. 소스코드]#include #include #include using BInt = long long;int S, P;int nA, nC, nG, nT;std::string DNA;bool isValid(const int *hit){ if (hit['A'] > S >> P; std::cin >> DNA; std::cin >> nA >> nC >> nG >> nT; const BInt result = solve(); std::cout
메르카토르 좌표계 [1. 개요]epsg:3857 는 Mercator(메르카토르) 좌표계를 의미함. [2. 특징]이 좌표계의 특징은, 두 점 사이의 거리를 유클리드 거리를 계산하는 방법으로 구할 수 있다는 것이다.sqrt(x^2 + y^2) : 과 같은 방식으로,
리눅스 패키지 관리 [1. 개요] [2. remove, purge]# apt remove "pkg_name"패키지만 제거설정 파일 이나 의존성 패키지는 삭제하지 않는다.# apt purge "pkg_name"패키지와 설정 파일 제거의존성 패키지는 삭제하지 않는다.# apt autoremove --purge "pkg_name"패키지 및 의존성 패키지 삭제--purge 를 명시한 경우 설정 파일까지 제거[3. list]# apt list# dpkg -l
std::thread vs std::async
std::packaged_task [1. 개요]std::packaged_task는 C++11부터 도입된 기능으로, 함수나 함수 객체를 비동기적으로 실행시키고, 그 결과를 std::future를 통해 받아올 수 있도록 감싸주는 wrapper. 기본적으로 std::thread 로 실행 한 task 의 리턴 값을 받기 위한 별다른 메커니즘이 없다.std::promise 를 사용하는 것도 한가지 방법이기는 하지만,,,그러나, std::async 와 마찬가지로 task 의 리턴 값을 받기 위한 메커니즘을 제공한다는 측면이 있다.std::async 는 join() 을 따로 호출하지 않아도 되지만,std::thread 를 통해 호출하게 하므로, join() 의 호출은 필요 함.[2. 예제]가장 일반적인 사용 방법std::packaged_task 를 ..
samba 서버 설치 [1. 개요]파일 공유 서버를 구축하기 위해, SMB 프로토콜을 구현한 samba 를 설치하고, 운영하는 대략적인 방법을 정리한다. 환경Ubuntu 20.04redhat 계열...설치 순서samba 패키지 설치설정 파일 작성사용자 계정 등록데몬 재실행[2. samba 패키지 설치]# apt install samba -y -- 아래는 설치 확인을 위함# smbd --version# systemctl status smbd -- 아래는 optional (외부 접속이 필요한 경우 고려)# apt install smbclient -y[3. 설정 파일 작성]default 로 아래 위치에 설정 파일이 있음./etc/samba/smb.conf설정파일의 구성은대괄호를 기준으로 구분되며, 그 밑에 상세 설정을 기술한다.e..
std::bind [1. 개요]socket api 의 bind() 가 아니라, c++ 의 std::bind() 는 함수에 인자등을 미리 고정해서 함수 객체(callable) 를 만든다.아래와 같은 상황에서 주로 사용하는데,callback 을 등록 할 때,함수 객체 호출 시, 일부 인자를 미리 고정하고 싶을 때,다른 함수 객체들과 조합할 때,최신 C++ 에서는 lambda 식을 주로 사용하긴 하지만, 알아 둘 필요 있음.[2. 사용 방법 - 전역 함수]#include #include using namespace std;int add(int a, int b) { return a + b;}int main() { // add의 첫 번째 인자 10을 고정하고, 두 번째 인자는 나중에 받음 auto add10 = s..
bitfield 사용 시 유의할 점 [1. 개요]메모리를 bit 단위로 제어할 필요가 있을 때 사용하는 bitfield 에 대해서 사용 시 유의할 점.bitfield 멤버에 대해서 주소를 확인 할 수 없다. (주소연산 불가)비트 필드가 저장되는 순서 (MSB→LSB 등)는 플랫폼/컴파일러 의존적[2. 비트 필드가 저장되는 순서]Little-endian arch 에 g++ 컴파일러 기준으로 아래 예제를 실행하면,#include #include struct Mystruct { unsigned char a : 4; unsigned char b : 4;};int main(){ unsigned char c = 0x8f; Mystruct obj; memcpy(&obj, &c, sizeof(c)); std::cout 출..
std::stringstream [1. 개요] [2. 주의 사항]초기화 명목으로 보통 명명되는 clear() 함수는 stringstream 에서는 의도한 대로 작동하지 않는다.내부 버퍼를 초기화하는 역할로 동작하지 않음.stream 에서 clear() 함수는 보통, flag 등을 초기화하는 역할을 하기 때문...# failbit / eofbit 등.따라서, 내부 버퍼를 초기화 하려면, 아래와 같이 빈 문자열을 설정하도록 해야한다..str("");
OS 별 select() 함수 사용법 [1. 개요]select() 함수는 비동기 I/O 처리를 위한 시스템 콜이다.여러개의 파일 디스크립터(보통 소켓) 을 동시에 감시하면서, read/write/error 등의 상태를 체크한다. 함수 원형은 아래와 같다.int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); timeval 구조체의 내용을 채워, I/O 상태 변화를 timeout 동안 기다리고,NULL 이면, blocking 으로 동작하고,NULL 이 아니지만 0으로 채워져 있으면, non-blocking 으로 동작한다.[2. 주의점]위 함수 사용 시 주의할 점은 첫번째 파라미터이다.리눅스 커널에서는, readfds ,..