sunrin
-
11. 11차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 8. 10. 01:25
01.cpp - dijkstra with priority queue(not completed)/*priority queue : O(logN) mininum heap 이용insert()1. 맨끝에 삽입.2. 부모보다 작으면 교환, 크면 멈춤.(반복) extract()1. 최소값을 임시 버퍼에 저장.2. 맨 뒤 노드를 맨 위로 덮어쓰기. (맨 뒤 노드는 없앤다.)3. (맨 위에서) 좌측노드와 우측노드와 자기 자신 중 최소값과 교환 (반복)4. 임시 버퍼에 있던 값을 반환 distance배열과 그 값을 이용한 priority queue 두개를 가지고 있어야 한다.distance값을 업데이트 할때 insert(). 최소값 찾을 때 extract() 하는데 뽑아낸 값과 distance배열의 값이 똑같아야 한다. ..
-
10. 10차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 8. 7. 21:27
1. flood fill : 이날 피치 못할 사정으로 지각해서 이 부분은 듣지 못했습니다2. dijkstra without Priority Queue#include #define INF 0x7FFFFFFFint start, finish, arr[1000][1000];int node_num, edge_num;int node_left;int distance[1000];int precedessor[1000];int visited[1000]; void search(int cur){ if (cur == start){ printf("%d ", start); return; } search(precedessor[cur]); printf("%d ", cur);}void dijkstra(int cur){ for (int ..
-
09. 9차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 8. 6. 18:45
01.cpp - union, enum#include union a{ int a; long long int b;}; //a와b의 주소값이 같다. b에 값 입력하고 a만 따올수 있음 enum days{mon=7, tue, wed}; // 연달아서 들어감 int main(){ union a U; U.b=999999999; printf("%d\n", U.a); enum days D; printf("%d ",mon); printf("%d\n", tue);}union은 주소값이 같은 원소들을 묶어놓을때 씁니다. 코드에서 볼 수 있듯, b에 값을 집어넣었지만 a도 같은 값을 가지고 있는 것을 볼 수 있습니다.enum은 순차적인 값을 갖는 원소들을 묶어놓을때 씁니다. 구조체에 대한 기본 설명은 http://sunrin..
-
08. 8차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 8. 2. 21:27
01.cpp - 회전초밥*제가 짠 소스가 아닙니다*/*#include #define MAX_DISH 3000001#define MAX_FISH 3001 int dishes[MAX_DISH];int hash[MAX_FISH]; int head_idx = 0, tail_idx = 0; int safe_increment(const unsigned int index, const unsigned int dish){ //dishes에 필요한 인덱스가 범위를 넘어가지 않도록 한다 return (index + 1) % dish;} int enqueue(const unsigned int current_num, const unsigned int dish){ const unsigned int ret = (++hash[dis..
-
06. 6차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 7. 30. 01:17
01.cpp - 큐 queue 큐는 우리 주변에서 가장 쉽게 접할 수 있는 개념입니다. 먼저 들어간 데이터가 먼저 나가는 형태죠. 자세한 내용은 http://sunrinnote.tistory.com/38 여기에 있답니다~ 123456789101112131415161718192021222324252627282930313233#include int Queue[100000];int d=-1, e=-1;void enqueue(int n){ if(n>=100000){ printf("overflow\n"); return; } Queue[++e]=n;} int dequeue(){ if(d>=e){ printf("underflow. return -1\n"); return -1; } return Queue[++d];} ..
-
05. 5차시 수업알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 7. 27. 02:27
01.cpp - 369게임푸는 방법 : 미리 테이블을 만들어 놓습니다.1) 3,6,9가 포함되는 수 자릿수 3,6,9가 포함되는 수 : A[i] 안포함되는 수 : B[i] 0 0 1 (=>이건 그냥 계산을 위한 수. 0자리수는 없음.) 1 3 7 2 10*A[1] + 3*B[1] = 51 B[1]*7 = 49 ... n 10*A[n-1] + 3*B[n-1] B[n-1]*7 {3x6x9x} ->여기까지 3개는 x에 10개씩 들어갈 수 있습니다.{x3x6x9}->여기까지 3개는 x에 3,6,9를 제외한 7개씩 들어갈 수 있습니다. n번째 항에서는 이미 369가 포함되어있는 수에는 0~9까지의 총 10개의 숫자 중 아무거나 들어가도 상관 없습니다.369가 포함 안되어있으면 3,6,9를 포함 시켜줘야겠지요. 3..
-
std::vector알고리즘/c++ 주요 문법 2017. 7. 22. 22:19
http://hyeonstorage.tistory.com/324 참고 #include #include #include #include using namespace std; int main(){ vector v; v.push_back(10); v.push_back(20); v.push_back(30); printf("%d\n", v.at(0)); printf("%d\n", v.at(v.size()-1)); printf("%lu\n", v.size()); v.clear(); if(v.empty()){ printf("empty~\n"); } v.push_back(30); v.push_back(10); v.push_back(20); sort(v.begin(), v.end()); for(int i=0; i
-
04. 4차시 교육알고리즘/정올1차교육(17.7.12~17.8.14) 2017. 7. 20. 02:33
01.cpp - string.h 함수들 일부 직접 구현하기. 1234567891011121314151617181920212223242526272829303132333435363738394041424344#include int strlen(char *str){ int i; for(i=0; str[i]!='\0'; ++i); return i;} void strcpy(char *from, char *to){ int i; for(i=0; from[i]!='\0'; ++i){ to[i]=from[i]; } to[++i]='\0';} int strcmp(char *str1, char *str2){ int i; for(i=0; str1[i]!='\0'; ++i){ if(str1[i]!=str2[i]) return 0..