전체 글 102

[C#] 오버라이딩

[C#] 오버라이딩객체지향의 특징인 다형성(Polymorphism)같은 이름을 갖는 메소드를 오버라이딩하여 새롭게 구현할 수 있다. 1. virtual-overrideclass Cat { public virtual void Init() { Console.WriteLine("고양이다냥!"); } } ​ class CatBlack : Cat { public override void Init() { base.Init(); Console.WriteLine("턱시도를 입었다냥"); } } ​ class CatCheese : Cat { public override void Init() { base.Init(); Console.WriteLine("치즈냥이지롱!"); } }오버라이딩할 메소드는 virtual 로 선언...

아카이빙/C# 2018.06.18

[C#] 형변환과 is, as

[C#] 형변환과 is, asC#에서는 형변환을 위해 is와 as 연산자를 제공한다.is는 객체가 해당 형식에 해당하는 지를 검사하여 bool 값을 결과로 반환.as는 형 변환 연산자와 같은 역할을 하지만, 형변환 연산자가 변환에 실패하는 경우에는 예외를 던지는 반면, as 연산자는 객체 참조를 null로 만든다.일반적으로 as 연산자를 사용하는 쪽을 권장. 준비using System; ​ class Mammal{} class Dog : Mammal{} class Cat : Mammal{} 테스트1Mammal m1 = new Dog(); Dog dog; Cat cat; ​ if(m1 is Dog) { dog = (Dog)m1; Console.WriteLine("m1 is dog"); }else{ Cons..

아카이빙/C# 2018.06.18

[C#] this() 생성자

[C#] this() 생성자다음과 같은 3개의 생성자를 오버로딩하는 클래스가 있다고 하자class Sample { int a, b, c; ​ public Sample() { this.a = 1; } ​ public Sample(int b) { this.a = 1; this.b = b; } ​ public Sample(int b, int c) { this.a = 1; this.b = b; this.c = c; } }문법상으로 문제는 없지만, 같은 코드가 중복되어 있다.Sample(int)에서 Sample() 생성자를 호출하고, b만 초기화 시켜줄 수는 없을까?이러한 문제를 해결하기 위해 C#에서는 this() 생성자를 제공해준다. this() 생성자를 활용한 예제class Sample { int a, b,..

아카이빙/C# 2018.06.18

[C#] 얕은 복사와 깊은 복사

[C#] 얕은 복사와 깊은 복사C#에서 클래스는 태생적으로 참조 형식이다.스택영역에 있는 참조가 힙영역에 할당된 객체의 메모리를 가리킨다.SampleClass a = new SampleClass(); SampleClass b = a;와 같은 코드에서는 a와 b는 서로 같은 객체를 가리키고 있다.같이 a의 필드를 변경하면 b의 필드도 변경된다. 이를 얕은 복사(Shallow Copy)라 한다.반면, a 인스턴스를 힙영역에 새로운 객체를 할당하여 복사하는 것은 깊은 복사(Deep Copy)이다. 간단한 복사using System; ​ class TestDeepCopy { public int field1; public int field2; ​ public TestDeepCopy DeepCopy() { Test..

아카이빙/C# 2018.06.18

[C#] static 필드와 메소드

[C#] static 필드와 메소드C#에서 static 필드나 메소드는 인스턴스가 아닌, 클래스 자체에 소속된다.해당 클래스에서 단 하나만 존재해야하는 필드나 메소드일 경우 사용인스턴스가 아닌 클래스에서 직접 호출할 수 있다. Global classusing System; ​ class Global { public static int Count = 0; ​ public static void StaticMethod() { Console.WriteLine("StaticMethod()"); } } ClassA, ClassBclass ClassA { public ClassA() { Global.Count++; } } ​ class ClassB { public ClassB() { Global.Count++; } ..

아카이빙/C# 2018.06.18

[C/C++] 배열 shift 구현

[C/C++] 배열 shift 구현간혹 알고리즘 문제를 풀다보면 배열에서 쉬프트 연산이 필요할 때가 있다.이 경우 배열 뒤집기를 활용하여 간단히 해결할 수 있다. arr = [1, 2, 3, 4, 5] ​ arr을 왼쪽으로 2칸 Shift 연산을 진행한다면? arr = [3, 4, 5, 1, 2] ​ 이 결과가 나와야 한다. ​ ​ 1. 앞에서 부터 2번째 원소까지를 뒤집자. arr = [2, 1, 3, 4, 5] ​ 2. 2번째 이후 원소 부터 끝까지 뒤집자. arr = [2, 1, 5, 4, 3] ​ 3. 전체 배열을 뒤집는다. arr = [3, 4, 5, 1, 2] ​ 이를 응용하면 오른쪽 Shift도 가능하다. ShiftRight, ShiftLeftvoid reverse(int arr[], int..

아카이빙 2018.06.16

백준 15789번 - CTP 왕국은 한솔 왕국을 이길 수 있을까?

백준 15789번 - CTP 왕국은 한솔 왕국을 이길 수 있을까?https://www.acmicpc.net/problem/15789 문제링크 참조 입력입력의 첫째 줄에 왕국의 수 N(3 ≤ N ≤ 100,000)과 동맹 관계의 수 M(1 ≤ M ≤ 200,000)이 주어진다. 이 후 M개의 줄에 X,Y가 주어진다. 이는 X 왕국과 Y 왕국이 동맹이라는 뜻이다.입력의 마지막 줄에 CTP 왕국의 번호 C와 한솔 왕국의 번호 H와 추가 동맹의 기회 K(0 ≤ K ≤ 100)가 공백으로 구분되어 주어진다. 주어지는 입력에서 CTP 왕국과 한솔 왕국은 절대로 동맹이 되지 않게 주어진다. 출력CTP 왕국의 힘의 최대값을 출력 접근Disjoint-set과 Max heap을 활용 C++ Code#include #inc..

아카이빙/BOJ 2018.06.04

해쉬 테이블(Hash Table)

해쉬 테이블(Hash Table)저장되는 데이터는 Key와 Value로 한 쌍을 이룸.탐색의 시간복잡도가 거의 ​에 가깝다.dictionary나 map이라고 부르기도 한다. 해쉬 함수(Hash function)key 값의 범위를 제한하여 메모리를 절약하기 위한 방법int GetHashValue(int key){ return key % 2018; }위의 해쉬 함수에서는 key 값을 받아 크기가 2018인 배열에 들어갈 인덱스를 결정한다.key값에 따라 중복되는 인덱스가 나타날 수 있음. 이를 충돌이라고 하며, 충돌을 다루는 방법은 체이닝과 프로빙, 이중 해쉬 등이 있다. 체이닝(Chaining)연결 리스트를 활용하여 충돌을 해결.추가적인 메모리가 필요하다. 프로빙(Probing)충돌이 발생했을 때 옆자리가..

아카이빙 2018.05.29

AVL 트리

AVL 트리균형잡힌 이진 탐색 트리검색, 삽입, 삭제의 시간 복잡도는 ​각각의 노드 마다 왼쪽의 서브트리의 높이와 오른쪽의 서브트리의 높이 차이(균형)가 1보다 크지 않음. 노드 클래스class Node { public: int data; int height; Node* left; Node* right; ​ Node(int data) { this->data = data; this->height = 1; left = NULL; right = NULL; } }; AVLTree 클래스class AVLTree { public: Node* root; ​ AVLTree(int data) { root = new Node(data); } Node* RotateLL(Node* node) {} Node* RotateRR(..

아카이빙 2018.05.29