프로그래밍 언어

    [C++] 원이 겹치는지에 대한 개인 코드

    struct Circle{ float x, y, z; float mp = 0; // middle-point float l = 0;public: Circle() = default; Circle(float x, float y, float z = 0) :x(x), y(y), z(z) { } bool operator==(Circle& ref) { return this->x == ref.x && this->y == ref.y && this->z == ref.z; }};int main(){ // 주어진 원 vector v({ {-3, 0}, {0, 5}, {2, 3} }); int size = v.size(); vector> check(size, vector(size)); int ans = 0; for (int i..

    [데이터베이스] 스키마란? 개념 스키마, 내부 스키마, 외부 스키마

    스키마란스키마란 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것이다. 즉, 개체의 특성을 나타내는 속성 (Attribute)과 속성들의 집합으로 이루어진 개체 (Entity), 개체 사이에 존재하는 관계 (Relation)에 대한 정의와 이들이 유지해야 할 제약 조건들을 기술한 것이다.쉽게 정리하자면, DB 내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조이다.특징1) 스키마는 데이터 사전 (Data Dictionary)에 저장된다. 2) 현실 세계의 특정한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어지게 된다. 3) 시간에 따라 불변인 특성을 갖는다. (시불변성) 4) 데이터의 구조적 특성을 의미한다. 5) 인스턴스에 의해 규정된다.1) 개념 스키마 = 전체적인..

    [데이터베이스] 용어 정리 - 릴레이션, 어트리뷰트, 튜플, 도메인, 차수, 카디널리티, 스키마

    릴레이션관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이다. 결국, 릴레이션은 DB 테이블이다. 흔히 개발을 할 때 DB 설계를 하게 되는데 ERD (Entity Relationship Diagram) 아래와 같이 구성한다. 그래서 이 네모칸 하나하나가 결국 릴레이션이다.특징한 릴레이션에는 똑같은 튜플 (Tuple)이 포함될 수 없으므로 릴레이션에 포함된 튜플들은 모두 상이하다.한 릴레이션에 포함된 튜플 사이에는 순서가 없다.튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변한다.릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않다.속성의 유일한 식별을 위해 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일한 값이 있을 수 있다.릴레이션을 구성하는 튜플을 유일하..

    [C#] 포인터 관련 unsafe fixed 키워드

    포인터를 사용하면 CLR에서 안전성을 책임지지 못하고, 불완전한 코드가 된다고 하며 에러를 발생하는데, 이렇게 예전 코드를 사용해야 할 경우, 빌드 속성을 변경해줌으로써 unsafe 코드를 사용 할 수 있다.사용 방법형식 또는 멤버 선언에서 unsafe 한정자를 사용할 수 있으며, 이렇게 선언해줄 경우 안전하지 않은 컨텍스트로 간주된다.  fixed 지시어는 unsafe 컨텍스트에서만 허용된다.  클래스가 인스턴스화 되면  CLR에 의해 언제든지 메모리가 이동 될 수 있는데, fixed 지시어를 이용하면 해당 코드에 들어간 변수 및 객체는 가비지 콜렉팅이 발생할 때 주소 재배치 대상이 아니게 된다.unsafe private uint reload(){ uint s0 = 0, s1 = 0; int..

    [C#] Marshal

    1. 데이터 타입IntPtr IntPtr 형식은 그 크기가 플랫폼마다 고유한 정수로 디자인 되었다. 즉, 이 형식의 인스턴스는 32비트 하드웨어 및 운영 체제에서는 32비트로, 64비트 하드웨어 및 운영 체제에서는 64비트여야 한다.  IntPtr 형식은 포인터를 지원하는 언어에서 사용할 수 있으며, 포인터를 지원하는 언어와 포인터를 지원하지 않는 언어 사이에서 데이터를 참조하는 일반적인 방법이 된다.  핸들을 보관하는 데도 IntPtr 개체를 사용할 수 있다. 예를 들어, IntPtr의 인스턴스는 파일 핸들을 보관하기 위해 System.IO..::.FileStream 클래스에서 광범위하게 사용된다.  IntPtr 형식은 CLS 규격이지만, UIntPtr 형식은 그렇지 않다. 공용 언어 런타임에서는 In..

    [C#] 관리되는, 관리되지 않는 코드

    관리되는 코드.NET CIL로 작성하고 컴파일 하는 .NET상의 코드 -GC 메모리 관리가 된다 관리되지 않는 코드기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 -GC 메모리 관리가 안된다.ex) 윈도우 시스템 자원IntPtr - 인터포인터관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입포인터는 메모리 주소값을 보관하는 곳IntPtr 타입은 메모리 주소를 가리키는 것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은 예다.파일처리, OS에서 제공되는것 처리를 할 때 사용된다.ex) 이미지 처리에서도 쓰인다.Marshal Class - 마샬관리되지 않는 메모리 블록 ..

    [C#] DLL 파일 생성, 참조하는 법

    DLL이란?DLL (Dynamic Link Library)은 동적 링크 라이브러리의 약자로 표준화된 함수나 데이터를 모아놓은 것을 의미한다. 장점) - 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약된다.- 리소스의 교체가 가능하다.- 재사용성이 뛰어나다.- 정적 링크를 사용하는 경우 실행 파일에 라이브러리의 함수가 모두 포함되어 실행파일이 커지지만 DLL을 사용하는 프로그램은 크기가 작다. C#을 이용해 DLL 파일을 생성 및 참조하는 방법은 다음과 같다 1. Visual Studio 실행 후 새 프로젝트를 만든다. 2. 이때 프로젝트 템플릿은 클래스 라이브러리로 생성해줘야 한다. 3. 프로젝트 명은 Calculator로 이름 짓고 다음을 클릭한다. 4. 클래스 명을 'Cal'으로 변경..

    [C++] 2차원 vector 크기 동적으로 재설정

    아래와 같이 이미 초기화가 된 벡터에 resize 함수를 사용하면 열이 제대로 반영이 안되는걸 볼 수가 있는데 2번째 인자인 vector(5)는 임시 객체이기 때문에 본 객체에 변경이 반영되지 않는다.int main(){ vector> a(7, vector(6)); a.resize(5, vector(5)); a[0].resize(5);} 해결 할 수 있는 방법은 새로운 임시 객체를 만들어 재할당 하는것이다vector> a(7, vector(6));a = vector>(7, vector(5)); 코딩테스트 때 유용하게 써먹자

    [C++] vector (벡터) 복사하기

    반복자#include #include using namespace std;void printVector(const vector v) { cout vect1{1, 2, 3, 4}; vector vect2; for (int i = 0; i  출력Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2The first element of new vector is :1할당 연산자 =(Assignment Operator =)#include #include using namespace std;void printVector(const vector v) { ..

    [C/C++] 부동소수점의 비교연산 안되는 이유 및 오차범위 해결하기

    int i = 0;double d = 0.f;while (i++  사실 C++에선 다 자르고 출력하기 때문에 파악하기가 쉽지 않다  아래와 같이 작성해주면 쉽게 파악 할 수가 있다 따라서if (d == 1.0) 를 해주면 false가 나오는 이유다int main(){ int i = 0; double d = 0.f; while (i++  이녀석만큼 빼주면 된다int main(){ int i = 0; double d = 0.f; while (i++