본문 바로가기

전체 글

(143)
[소프트웨어] 객체지향의 기본원리 정리 OOP 객체 지향 프로그래밍(Object Oriented Programming), 객체라는 기본단위로 나누고 객체의 상호작용을 서술하는 방식, 쉽게 현실 세계를 프로그램 언어로 서술한 것 추상화 어떤 영역에서 필요로하는 하는 속성이나 행동을 추출하는 작업 여러 개체들의 집합을 클래스라고 부름 (일반화하다) 캡슐화 정보 은닉 알 필요가 없는 정보에 대해서 외부에서 접근하지 못하도록 제한하는 것 내부 속성의 타입이나 로직이 변경되었다고 해서, 메서드의 반환 타입을 기존과 같이 유지한다면 참조하고 있는 다른 코드를 변경할 필요가 없음 변경이 필요하다면, 추 후에 deprecated 등의 신택스를 사용해 서서히 옳바른 코드로 변경해나가면 됨 일반화 관계 정보, 기능의 재사용도 가능함 (슈퍼클래스의 메서드를 오버..
[C#] 동기적 재시도(Retry) 함수 구현하기 많은 내용은 포함되지 않았고 일단 필요한 몇번 재시도할 것인지, 익셉션 발생이 핸들러와, 실패시 핸들러를 모두 넣었다. (옵셔널 파라미터라는게 정말 편하다.)
[Math/Theory of number] GCD의 증명 정수론 기반 지식 소수 : 약수가 1 또는 자기 자신인 수 서로소 : 두 정수의 공약수가 1 약수와 배수 : a*b = c -> a|c, b|c 로 나타냄, a의 배수인 c, b의 배수인 c 정도로 보면 될 듯 공배수 : a|b c|b라면 b는 a, b의 공배수가 됨 공약수 : a|b a|c라면 a는 b, c의 공약수가 됨 서론 정리 1 m, n, c가 정수일 때 c가 만약 m, n의 공약수이면 c|(m+n), c|(m-n)가 성립함 c|m 이면 c|m*n임 정리 2 두 정수 a, b가 있을 때, a = b*q + r이면 gcd(a,b) == gcd(b,r)이다. 증명 c를 a, b의 공약수로하고 했을 때 c|b*q 는 성립 c|a와 c|b*q가 성립하니, 정리에 의해 c는 b, r의 공약수 (왜냐하면,..
[C#] Thread로 Timeout 구현하기 C#에서 Thread로 timeout구현을 해보았다. Join을 호출하면 파라미터로 주어진 시간동안 현재 스레드가 정지하게 되므로 유의하자. (Join을 호출시 그 시간이 넘었더라고 해도 대상 스레드는 abort되지 않는다.) class로 만들어 쓰자면 이정도가 될 듯 하다.
[Algorithm/Tree] Binary Tree (이진트리) Binary Tree / 이진 트리최대 차수가 2인 트리 구조증명정리 1 : N레벨에서의 최대 노드의 수직관적으로 노드의 레벨 N의 최대 노드의 갯수는 2N-1 이다. P(N) = 2N-1 이라고 했을 때P(1) = 21-1 = 20 = 1P(N) = 2N-1P(N+1) = 2N노드의 차수는 최대 2 이므로2*P(N) = 2*2N-1 = 2N = P(N+1) 이므로 깊이가 N일 때의 최대 노드 수는 2N-1 이다.정리 2 : 트리의 최대 노드의 수일단 결과적으로 계산해 본다면 N레벨의 트리의 최대 노드의 수는 2N-1이 된다. n = 1 : 2-1 = 1 n = 2 : 22-1 = 4-1 = 3 n = 3 : 24-1 = 8-1 = 7왜 이렇게 되는가? 먼저 위와 같은 결과의 수식을 귀납법으로 증명해보겠..
[Algorithm/Math] 비트 연산으로 log2 구하기 쉽게 구한다면 while(n>1) { n/=2; count++} 이런식으로 구할 수 있겠지만 곱하기(*) 나누기(/) 연산은 생각보다 엄청나게 느리다. 보통 더하기 연산의 수십배 이상 느린 곱하기, 나누기 연산이라고 했을 때.... 그래서 아래와 같이 바꿀 수 있는데 뭔가 좀더 줄이고 싶다면 logBitCount 만에 구할 수 있다. 탐색문제나 log2로 무엇인가 구해야하는 문제가 나왔다면 곤란하기 짝이 없는데 아래와 같은 코드로 생각보다 쉽게 구할 수 있다(물론 정수 값만 가능하다.)
[Algorithm/boj] 애너그램 그룹 문제 링크 : https://www.acmicpc.net/problem/6566 정말 진짜 완전 귀찮은 문제... 위 문제를 푸는 방법은 몇가지 있는데 1. 단어별로 counting sort -> 결과값(int[])을 가지고 z부터 letter별로 sort 하면 된다, 끝부터하는 이유는 사전순을 위해 (26NlogN) 2. 단어별로 counting sort -> 결과값(string) 가지고 quick sort한데, 성능은 보장 못함 (N^2ogN) 3. 단어별로 counting sort -> 결과값(int[]) 알파벳 배열을 가지고 열심히! radix sort한다, D가 낮을 경우 굉장히 유리하나 성능(DN)은 보장 못한다 ㅎ. 일단 위 3가지 푸는 방법 중 3번으로 풀었는데, 출력형식에 유의하면 될 듯..
[Algorithm/boj] 애너그램 만들기 문제 링크 : https://www.acmicpc.net/problem/1919 간단히 말해서 여러가지 쌍의 단어들을 주어지는데 각 단어의 쌍의 애너그램 거리를 찾는 것 https://gist.github.com/jinseoung-lee/7bd8981f7ff9fa521b76f837cd4951eb