본문 바로가기

Programming/Algorithm

Design Pattern - Chain of Responsibility (COR) 사용 예 : 버튼에서 F1을 누르면 help request가 계속해서 상위 UI 객체로 전달되다가, help method를 가지고 있는 최초의 UI가 처리하고, 더이상 전달하지 않음. 더보기
Design pattern - mediator 목적 : N : N 의 관계를 단순화 시킬때 사용 더보기
std::string c++ 활용 예제 #include #include using namespace std; int main(){string str = "my name is"; // 확장str.append(" onegun");cout 더보기
std c++ vector 와 sort 사용법 예제 #include #include "iostream" #include #include using namespace std; typedef struct point{int a;char b;} t_pos; bool cmp(t_pos &A, t_pos &B) {return A.b < B.b;} int main(){cout 더보기
quick sort 참고 : http://blog.naver.com/kmediart/220552769535 #include using namespace std; #define SWAP(a, b) {int t=a;a=b;b=t;} // 다른분이 구현한것int quick_sort(int a[], int left, int right){int i, j;int pivot_value;int tmp; // 치환을 위한 임시 변수 if (left >= right){// 정렬 수행 하지 않음, 즉 정렬할 항목이 하나임.return 0;} i = left + 1;j = right; pivot_value = a[left]; // 왼편 끝단의 항목의 값을 Pivot 값으로 선정 while (1){// Pivot 값보다 큰 값 (이상) 일때 까지.. 더보기
visual studio 에서 stack size 유추 / set 하기 1 MByte = 1024 (Kbyte) * (1024) byte = 1048576 byte 256 MByte = 268435456 byteint 배열 67,108,864개 visual studio 에서 stack size 변경하기http://copynull.tistory.com/40 메뉴에서"프로젝트" -> "[프로젝트명] 속성" -> 왼쪽메뉴에서 "구성속성" -> "링커" -> 시스템 스택 예약 크기를 byte 단위로 입력 더보기
각종 알고리즘 링크 분수(1/x)의 그래프http://www.mathteacher.pe.kr/study/21_0416.htm kadane 알고리즘http://rerun.me/2012/08/29/find-continuous-subarray-with-maximum-sum-problem-kadane-s-algorithm/ LCA (가장 가까운 공통 조상 찾아내기 - 트리에서)https://www.acmicpc.net/board/view/332 -> 댓글http://dyngina.tistory.com/29 -> 본문https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/#Low.. 더보기
Tree 이진 인덱스 트리(binary indexed tree)http://blog.secmem.org/486 인덱스 트리http://blog.naver.com/PostView.nhn?blogId=choyi0521&logNo=80204274208 더보기
root 계산 함수 만들기 원문 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Xrxs&articleno=41 #include double SQRT(double, double);void main() { double input, x, result; while(1) { scanf("%lf", &input); scanf("%lf", &x); result = SQRT(input, x); printf("제곱근은? : %lf \n", result); } } double SQRT(double input, double x) { for(int i=0; i 더보기
빠르게 랜덤변수 발생시키기 int g_seed;int fastrand() { g_seed = (214013 * g_seed + 2531011);return (g_seed >> 16) & 0x7FFF;} 기존에는 아래와 같은 방식으로 랜덤 변수를 생성하였었다.time_t seconds;time(&seconds);srand((unsigned int)seconds);//srand((unsigned)time(0));v0 = rand() % 10; 하지만 이 방식은 초당으로 seed 가 변해서 그런지, 랜덤숫자가 빠르게 변하지 않는 단점이 있다. 이 대신에 fastrand 를 사용하면, 빠른 속도로 랜덤한 변수를 얻을 수 있다. 더보기
최소공배수, 최대공약수 - 유클리드 호제법 최대공약수 : gcd(a,b)최소공배수 : lcm(a,b) = a*b/gcd(a,b)최대공약수가 1인, 둘 이상의 양의 정수들은 서로소(relatively prime) a = Gx, b = Gy (단, x, y는 정수)일때... G 는 최대공약수최소공배수는 a*b/G 임 ---------------------- gcd(a,b) 구하기 설명 1071과 1029의 최대공약수를 구하면, 1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. => 421029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. => 2142는 21로 나누어 떨어진다.따라서, 최대공약수는 21이다. 78696과 19332의 최대공약수를 구하면, 78696 = .. 더보기