All Posts

[C++] 표준 템플릿 라이브러리(STL)
·
Language/C & C++
STL STL(Standard Template Library)은 C++에서 제공하는 표준 템플릿 라이브러리로, 다양한 자료구조와 알고리즘을 템플릿 형태로 제공한다.STL은 효율적이고 재사용 가능한 코드를 작성할 수 있도록 돕는 강력한 라이브러리로, 크게 컨테이너, 반복자(iterator), 알고리즘의 세 가지 주요 구성 요소로 이루어져 있다. STL container • vector#include 벡터는 가변 크기의 배열을 일반화한 클래스로 다양한 자료형을 담을 수 있다. 원소의 저장, 삭제, 검색 등 다양한 멤버 함수를 지원하며 인덱스를 통해 접근 가능하다. 아래와 같이 선언하여 사용한다.vector vector_name;주요 멤버 함수는 다음과 같다.push_back(element)벡터 마지막에 el..
[C++] 템플릿(template)을 통한 일반화(generic)
·
Language/C & C++
함수 템플릿 어떤 함수를 중복 함수로 구현할 때 매개변수의 자료형이 int, double 형으로만 구분된다면, 동일한 코드 작성이 불가능하다. int, double 형으로만 예를 들었지만, 다양한 경우 함수 동작이 자료형과 관계없이 동작하는데 자료형 때문에 중복 함수로 구현이 불가능한 경우가 있다. 이때 템플릿을 사용하여 자료형을 일반화시켜 함수를 구현할 수 있다.예를 들어 아래와 같은 두 함수가 있다고 가정하자.void print(int a) { cout 간단한 코드이지만 매개변수로 받을 때 int 인지 double 인지 구분 불가능하기 때문에 중복해서 사용할 수 없는 함수들이다.이때 template 키워드를 이용하여 자료형을 일반화시켜 아래와 같이 함수를 일반화시킬 수 있다. 이를 제네릭 함수라..
[C++] virtual 키워드를 활용한 함수 오버라이딩 및 추상 클래스
·
Language/C & C++
함수 오버라이딩 (Function Overriding) 파생 클래스에서 기반 클래스의 함수와 동일한 이름의 함수를 정의하고 사용해야 할 수 있다. 이때 기반 클래스의 함수가 호출되면 의도한 함수가 아니라 다른 함수가 호출되는 것이므로 문제가 발생할 수 있고, 이를 방지해야 한다.예를 들어 아래와 같은 코드가 있다고 가정하자.#include using namespace std;class Base {public: void f() { cout f(); return 0;}출력은 다음과 같다.DerivedBase업캐스팅을 진행하면서 기반 클래스를 가리키게 되므로 업캐스팅된 포인터가 멤버 함수 호출시 기반 클래스의 멤버 함수가 호출되었다.그런데 앞서 언급한 것과 같이 업캐스팅을 하더라도 파생..
[C++] 업캐스팅(upcasting) 및 다운캐스팅(downcasting)
·
Language/C & C++
업캐스팅 업캐스팅은 기반 클래스 포인터로 파생 클래스의 객체를 가리키는 것을 말한다.예를 들어 기반 클래스와 파생 클래스가 아래와 같다고 가정하자.class Base {public: int data;};class Derived : public Base {public: string name;};이때 다음과 같이 업캐스팅을 해줄 수 있다.Base* b;Derived d;b = &d;혹은 간단하게 아래와 같이 사용하는 것도 가능하다.Base* b = new Derived();그냥 파생 클래스의 포인터를 사용하지 않고 기반 클래스로 업캐스팅해서 사용하는 것은 기반 클래스를 이용하는 파생 클래스가 다양한 경우 이 다양한 파생 클래스들을 업캐스팅을 통해 단일한 자료형으로 다룰 수 있기 때문이다.이렇게 단..
[Discrete Mathematics] 비둘기집 원리(pigeonhole principle)
·
Mathematics/Discrete Mathematics
비둘기집 원리 $ k $ 개의 비둘기집에 $ n $ 마리의 비둘기가 들어갈 때 $ k 비둘기가 $ n +1 $ 마리, 비둘기 집이 $ n $ 개라 할 때 한 집당 한 마리의 비둘기가 들어가 있다고 가정하면, 이미 모든 집에는 비둘기가 들어가 있는데 한 마리의 비둘기는 들어가지 못했기 때문에 이 비둘기 한 마리를 어느 집에 할당해도 특정 비둘기 집은 두 마리의 비둘기가 들어가게 된다. 즉 $ n $ 개의 비둘기 집이 존재할 때 비둘기가 $ n $ 마리를 초과한다면, 그리고 모든 비둘기가 비둘기 집에 들어간다면 반드시 두 마리 이상이 들어가 있는 비둘기 집이 존재한다. 확장 $ f $ 가 유한 집합 $ X $ 에서 유한 집합 $ Y $ 로의 함수이고, $ | X | > | Y | $ 라 할 때, $ x_1,..
[Discrete Mathematics] 간단한 이산 확률론(discrete probability theory)
·
Mathematics/Discrete Mathematics
기본 개념 실험(experimant)은 결과 도출 과정, 사건(event)은 실험 결과, 표본 공간(sample space)은 가능한 모든 실험 결과 집합이다.유한한 표본공간 $ S $ 에서 모든 결과가 동등하게(equally likely) 일어난다 가정할 때 사건 $ E $ 의 발생 확률 $ P(E) $ 은 $ P(E) = | E | / | S | $ 이다. 만약 가능한 결과가 $ n $ 개 라면 각 결과가 나올 확률은 $ 1/n $ 이다. 그러나 일반적으로 결과는 동등하게 일어나지 않는다.함수 $ P $ 를 확률 함수라 하면 표본공간 $ S $ 의 원소로서 각 결과 $ x \in S $ 에 대해 $ [0, 1] $ 의 수를 할당한다. 이때 할당된 수가 확률이며 $ \sum_{x \in S} P(x) ..
[Linear Algebra] 좌표벡터(coordinates vector)와 전이행렬(transition matrix)
·
Mathematics/Linear Algebra
좌표벡터 (Coordinates Vector) $ \mathbb{R}^n $ 의 어떤 점 $ P = \{ x_2, x_2, \cdots, x_n \} $ 에 대한 벡터 $ \mathbf{x} = \overrightarrow{OP} $ 는 표준기저 $ S = \{ \mathbf{e_1}, \mathbf{e_2}, \cdots, \mathbf{e_n} \} $ 을 이용하여 다음과 같이 나타낼 수 있고 이는 유일하다.$$ \mathbf{x} = x_1 \mathbf{e_1} + x_2 \mathbf{e_2} + \cdots + x_n \mathbf{e_n} $$이때 $ x_1, x_2, \cdots, x_n $ 은 점 $ P $ 의 좌표이므로 벡터 $ \mathbf{x} = \{ x_1, x_2, \cdots..
[Baekjoon 11722] 가장 긴 감소하는 부분 수열 | Python
·
Online Judge/Baekjoon
https://www.acmicpc.net/problem/11722문제 주어진 수열의 부분 수열 중 가장 긴 감소하는 수열을 찾는 문제이다. 풀이 각 인덱스에서 감소하는 수열의 최대 길이를 확인하고 그 중 가장 큰 값을 출력하면 된다.어떤 인덱스를 i라 하면 에서 감소하는 수열의 최대 길이는 i보다 앞 인덱스의 수 중 num[i]보다 큰 수를 찾고, 그 중 그 인덱스의 감소하는 수열의 최대 길이를 확인하여 1을 더하면 i에서의 감소하는 수열의 최대 길이가 된다.예제로 주어진 아래 수열을 확인해보자.10 30 10 20 20 1010은 자신보다 앞에 수가 없으므로 0에서의 감소하는 수열의 최대 길이는 1이다. 30 역시 자신보다 앞에 수 중 자신보다 큰 수가 없으므로 1이다. 10은 앞 수 중에 30이 자..
[Java] 업캐스팅(upcasting)과 다운캐스팅(downcasting)
·
Language/Java
업캐스팅 캐스팅은 자료형을 변환하는 것을 말한다. 보통은 자료형을 변형하는 일은 기본 자료형을 변환할 때, 예를 들어 int 형 변수를 double 형으로 변환할 때가 많지만, 어떤 클래스의 객체를 변환할 때도 있다.상속 관계가 있는 객체, 즉 자신의 부모 클래스가 있는 클래스의 객체가 있다고 가정하자. 이 객체를 부모 클래스의 객체로 변환하는 것이 업캐스팅이다.예를 들어 아래와 같은 클래스 관계가 있다고 가정하자.class ParentsClass { ...}class ChildClass extends ParentsClass { ....}그렇다면 아래와 같이 업캐스팅을 할 수 있다. 기본 생성자를 생성할 수 있다고 가정했다.ParentsClass p = new ChildClass();혹은 아래..
[Java] 클래스 상속(inheritance)
·
Language/Java
상속 상속이란 기존 클래스를 확장하는 개념으로 부모 클래스(parent class)의 속성과 기능을 자식 클래스(child class)에 물려주는 것이다. 즉 자식 클래스에서는 부모 클래스의 인스턴스 변수와 인스턴스 메소드를 사용할 수 있다. 단 부모 클래스의 인스턴스 변수와 인스턴스 메소드의 접근지정자가 private이거나, default인데 패키지가 다르다면 자식 클래스에서 접근이 안된다. 부모 클래스가 아니라 슈퍼 클래스(super class), 자식 클래스가 아니라 서브 클래스(sub class)라고도 한다.상속을 통해서 기반 클래스에 있는 멤버 변수와 멤버 함수를 그대로 사용할 수 있으니 파생 클래스에서는 멤버 변수와 함수를 간결하게 작성할 수 있고, 클래스들 간 구조적 관계를 파악하기도 용이하..
애스터로이드
'분류 전체보기' 카테고리의 글 목록 (7 Page)