목록학습 (34)
while (1): study();

1. BLEU (bilingual evaluation understudy) n-gram precision, 생성한 문장을 기준으로 reference의 유사도를 파악. BLEU (bilingual evaluation understudy) is an algorithm for evaluating the quality of text which has been machine-translated from one natural language to another. Quality is considered to be the correspondence between a machine's output and that of a human: "the closer a machine translation is to a profes..

비트마스크를 입력받는 예제가 있다. vector getBitmask(vector bitmasks, const int length) { for (int n = 0; n < length; n++) { int numElem; int elem; scanf("%d", &numElem); bitset bitmask; for (int e = 0; e < numElem; e++) { scanf("%d", &elem); bitmask.set(elem, 1); } bitmasks.push_back(bitmask); } return bitmasks; } 이때 반환형이 void이든 벡터이든 결과의 size()를 호출하면 0이 나온다. 이후 빈 벡터에 대해 연산을 가하면 vector subscript out of range 등..

컴퓨터는 내부적으로 이진수(비트)를 사용합니다. 그렇기 때문에 십진수 혹은 불린형을 사용하는 것보다 이진수를 사용하여 데이터를 표현하는 것이 더 효과적인 경우가 있습니다. 이렇게 이진수로 데이터를 표현하는 방식을 비트마스크라고 합니다. 파이썬이 지원하는 비트 연산자는 다음과 같습니다. & : AND 연산 | : OR 연산 ^ : NOR 연산 ~ : NOT 연산 : 쉬프트 연산 파이썬이 지원하는 연산자들을 이용하여 비트마스크를 다양하게 조작해보겠습니다. 들어가기 앞서 파이썬에서 제공하는 bin함수는 '수를 이진수 문자열로 바꾸어 출력에 용이하게 해줄 뿐' 실제 형변환이 되거나 그러진 않습니다. 따라서 일반적인 정수로 연산 및 변수 할당을 진행하면 됩니다. 우선 비트마스크는 0으로 초기화하겠습니다. bitm..

링크: https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt 자료형별로 정리되어 있어 참고하기 용이하다.

LNK2019는 보통 두 가지 상황에 발생한다. lib 파일이 선언되지 않은 경우 함수가 선언만 되고 정의되지 않은 경우 필자 같은 경우 두 번째 케이스였다. 함수 정의를 지웠는데, 선언 부분에서 지워주지 않아서 오류가 발생했다. 선언된 함수와 정의된 함수 목록을 맞춰주니 오류가 해결되었다.

복사 생성자는 메모리 공간의 할당과 초기화가 동시에 일어나는 상황에 호출된다. 좀 더 디테일하게는 세 가지 상황으로 나누어진다. 기존에 생성한 객체로 새로운 객체를 초기화하는 경우 call-by-value 방식으로 객체를 함수의 인자로 전달하는 경우 함수가 참조형이 아닌 객체를 반환하는 경우 1. 기존에 생성한 객체로 새로운 객체를 초기화하는 경우 Object obj2 = obj1; Object obj2(obj1); 가장 대표적인 복사 생성자 호출 방식이다. 이 경우 obj2를 저장할 메모리 공간을 할당함과 동시에 obj1과 멤버 대 멤버 얕은 복사가 발생하여 새로운 객체를 호출한다. 2. call-by-value 방식으로 객체를 함수의 인자로 전달하는 경우 void Function(Object obj)..

아래 코드를 실행 시 예외가 발생한다. #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; class Person { private: char* name; int age; public: Person(char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy(name, myname); age = myage; } void ShowPersonInfo() const { cout

절차지향적 언어였던 C에서 객체지향적 언어인 C++로 넘어오면서 생긴 주요한 변화 중 하나는 class 키워드의 존재이다. class는 클래스를 생성하는 키워드이다. 그렇다면 클래스는 어떤 장점이 있기에 언어를 따로 만들면서까지 객체지향 프로그래밍을 실현하려고 한 것일까? 객체지향 프로그래밍의 장점은 더더욱 많겠지만, 여기선 클래스의 장점에 국한해서 이야기한다. 클래스의 장점에는 정보 은닉과 캡슐화가 있다. 우선 정보 은닉부터 보자. 정보 은닉이란 멤버 변수에 대한 직접적인 외부 접근을 차단하는 것이다. 이전에도 복합 데이터 구조를 "구조체"로 지원했던 C였지만, 구조체와 클래스는 결정적인 차이가 있다. 구조체는 멤버를 public으로 초기화하고, 클래스는 멤버를 private으로 초기화한다. 이 간단한..

인터넷 익스플로러라던가, 크롬과 같은 브라우저들은 인터넷과 떨어질래야 떨어질 수 없는 현대인들에게는 너무나 친숙합니다. 이렇게 친숙한 브라우저들을 우리는 조금 더 어렵게, 일종의 가상 머신이라고도 부를 수 있습니다. 가상 머신(Virtual Machine)은 하드웨어 상에 설계된 컴퓨터와는 다르게, 소프트웨어 상에서 설계된 컴퓨터를 말합니다. 그렇다면 브라우저가 하나의 컴퓨터라는건데... 어떻게 이 개념을 이해할 수 있을까요? 브라우저의 언어 컴퓨터와 대화하기 위해서, 정확히는 하드웨어 상에 설계된 컴퓨터와 대화하기 위해서는 기계어를 사용해야 합니다. 가상 머신이 하드웨어상의 컴퓨터와 다른 점은 가상 머신만의 기계어를 사용한다는 점입니다. 브라우저가 하나의 가상머신이라고 했으니 그럼 하드웨어상 컴퓨터와 ..

typedef struct __Point { int xpos; int ypos; } Point; 위의 구조체를 기반으로 두 점의 합을 계산하는 함수를 다음의 형태로 정의하고 Point& PntAdder(const Point& p1, const Point& p2); 임의의 두 점을 선언하여, 위 함수를 이용한 덧셈연산을 진행하는 main함수를 정의해보자. 단, 구조체 Point 관련 변수의 선언은 무조건 new연산자를 이용해서 진행해야 하며, 할당된 메모리 공간의 소멸도 철저해야 한다. #include using std::cin; using std::cout; using std::endl; typedef struct __Point { int xpos; int ypos; } Point; Point& PntA..