본문 바로가기

분류 전체보기

(694)
[인코딩] UTF-8 [1. 개요]UTF-8 인코딩 방식에 대해서 정리한다. UTF-8 은 멀티바이트 형태의 문자 인코딩 방식이다.경우에 따라 문자 하나를 1바이트 혹은 2바이트, 3바이트 최대 4바이트로 인코딩 한다.첫번째 바이트의 bit 패턴을 통해서, 몇 바이트로 표현 된 문자인지 알 수 있다.첫번째 byte 의 bit 패턴이 다음과 같을 때,b0xxx_xxxx    => 1byteb110x_xxxx    => 2byteb1110_xxxx    => 3byteb1111_0xxx    => 4byte그리고 인코딩 된 바이트 수에 따라서 인코딩 패턴은 아래와 같다.1byte : b0xxx_xxxx2byte : b110x_xxxx, b10xxxxxx3byte : b1110_xxxx, b10xxxxxx, b10xxxxxx4by..
[파이썬] 텍스트 인코딩 및 디코딩 [1. 개요]특정 charset 으로 인코딩 된 byte stream 을 적절히 인코딩 및 디코딩 하는 방식 정리 [2. 배경지식]인코딩평문(문자) 을 정해진 규칙에 따라 값 으로 표현'A' => 0x41디코딩값을 정해진 규칙에 따라 평문(문자) 로 표현0x41 => 'A'인코딩 / 암호화디코딩 / 복호화[3. 예제]data = b'\xbc\xbc\xc1\xbe\xb4\xeb\xb7\xce'#data = bytes([0xbc, 0xbc, 0xc1, 0xbe, 0xb4, 0xeb, 0xb7, 0xce])# 혹은 위와 같이 작성 가능.try: print("decoding result", data.decode('utf-8'))except Exception as e: print("error", e)p..
multibyte string to widechar string [1. 개요]멀티바이트 형태의 문자열(UTF-8) 을 wide char 형태의 문자열(유니코드) 로 변환하는 방법 정리.[2. 오해]std::string 을 std::wstring 으로 변환하는 방법을 단순히 아래와 같은 방법으로 알고 있었는데, 아래 방법은 틀린 방법이다.std::wstring wstr(str.begin(), str.end());위 코드는 단순히 멀티바이트 형태의 string 의 내부 버퍼를 복사할 뿐이다.#include #include #include int main(){ const char * buf = "안녕하세요"; std::string str = buf; std::wstring wstr(str.begin(), str.end()); ..
iconv 함수 (인코딩 변환) [1. 개요]리눅스 C++ 코드 작성 시, 영어 외 문자열을 다루기 위해서 경우에 따라 인코딩 변환이 필요함.윈도우 OS 의 경우, 디폴트 인코딩이 EUC-KR리눅스 OS 의 경우, 디폴트 인코딩은 UTF-8가령 윈도우 에서 작성된 파일(한글로 작성된) 을 리눅스에서 읽어서 출력해야 하는 경우,,또, 윈도우에서 컴파일 할 경우 기본적으로 문자열을 EUC-KR 로 처리하고,리눅스에서 컴파일 할 경우는 문자열을 UTF-8 로 처리함.[2. 상황]리눅스 에서 아래 파일의 인코딩이 UTF-8 이 아닌 것을 확인.euc.cpp: text/x-c; charset=iso-8859-1이 파일의 작성된 한글 문자열은 출력 시 깨져서 나옴.## 반대로 아래와 같은 파일은 윈도우에서 컴파일 후 출력하면 한글 문자열이 깨져서..
file 명령어 [1. 개요]file 명령어 사용법 정리.[2. file 의 인코딩 유형을 확인하고자 할 때]file -i test.txt
[리눅스] goto 사용 시 컴파일 [1. 개요]c++ 코드 작성 시, goto 문이 필요한 경우동일한 코드라도 컴파일러 종류에 따라서 컴파일이 될  수도 있고 안될 수 있다.윈도우 msvc 컴파일러는 허용 폭이 관대한 편이고,리눅스 g++ 컴파일러는 굉장히 타이트 한 편인 것 같다.[2. 예제]아래 코드는 리눅스에서 컴파일이 안된다.#include int main(int argc, char **argv){ if (argc == 1) { goto EXIT; } int a=3; int b=4; std::cout  error: jump to label ‘EXIT' 이라는 에러가 발생.원인은 변수의 선언이 goto 문과 와 goto 할 label 사이에 있..
컨벡스 헐. [1708] [1. 문제 설명]https://www.acmicpc.net/submit/1708/87944456[2. 풀이 접근]컨벡스 헐 알고리즘의 기본 문제[3. 코드]
Convex hull (볼록 껍질) [1. 개요]컨벡스 헐(이하 볼록 껍질) 이란?평면 위 N개의 점이 주어졌을 때,M 개의 점을 이용하여, 나머지 모든 점을 내부에 포함하게 만드는 도형.즉, 모든 점을 포함하는 볼록 다각형 중, 면적이 최소인 다각형을 말한다.[2. 알고리즘 - 개요]컨벡스 헐을 구하는 알고리즘은 아래와 같은 것들 있다.Graham scan (그라함 스캔)Jarvis marchDivide & Conquer여기서 가장 유명한 알고리즘이 그라함 스캔이라고 한다.그라함 스캔의 동작 방식은 아래와 같다.주어진 점을 y 순으로 정렬한다. (y 가 같은 경우는 x 순으로 정렬)정렬 된 점 중 첫번째 점을 기준으로 반시계 방향으로 나머지 점들을 정렬한다.정렬 된 점 들 중, 처음 2 개의 점을 스택에 푸쉬한다.그 다음 점이,  스택의..
네트워크 유량. [6086] [1. 문제 설명]https://www.acmicpc.net/problem/6086[2. 풀이 접근]동일한 edge 가 여러 번 주어질 수 있다.이 경우 해당 edge 의 용량을 그 만큼 늘려 주도록 한다. 그리고,,, [3. 코드]
네트워크 유량, Dinic 알고리즘 [1. 개요]네트워크의 최대 유량을 계산 할 때, 포드-풀커슨 알고리즘 외 디닉 알고리즘에 대한 정리https://testkernelv2.tistory.com/601[2. 알고리즘]디닉 알고리즘은 두가지 단계로 구성 된다.Level graph 의 생성Blocking flow 를 지키면서, 유량을 흘려보냄.더 이상 source 에서 sink 로 유량을 흘려 보낼 수 없을 때까지 위 과정을 반복한다.증가 경로 (Augmenting path) 가 없을 때 까지[3. Level graph]레벨 그래프는 BFS 를 이용하여 계산한다.Source 에서 시작하여, Sink 에 도달 할 때 까지 BFS 를 진행 하는 것이다. 여기서 Level 은 각 노드에 설정 되는데, Source 에서 해당 노드까지 도달한 최소 h..