[[TableOfContents]] = ì˜ˆì • = * ì‹œê°„ë³µìž¡ë„ * ì •ë ¬ - 삽입 ì •ë ¬ * 피보나치 수 - 재귀ì 방법 - 순차ì 방법 * ì‹œê°„ì´ ë‚¨ì•„ì„œ ë¶„í• ì •ë³µ. - 피보나치 수 - nê°œì˜ ì ì´ ì£¼ì–´ì¡Œì„ ë•Œ, 가장 ì§§ì€ ê±°ë¦¬ì˜ ì„ ë¶„ 구하기. * ì‹œê°„ì´ ë‚¨ì•„ì„œ ë™ì 프로그래ë°. - 피보나치 수 * ìŠ¤íƒ = ì°¸ì—¬ìž = ||강사 || [ê¶Œì˜ê¸°] || O || ||<|3> 새싹 || [금강현] || O || || [권준í˜] || O || || [ì´ì§€ìˆ˜] || O || = ì°¸ê³ ìžë£Œ = * [http://mirror.enha.kr/wiki/%EC%A0%95%EB%A0%AC ì •ë ¬] = ìˆ™ì œ = * 삽입 ì •ë ¬ 구현. * 피보나치 수 재귀ì 방법으로 구현. * ìŠ¤íƒ í˜¼ìžì„œ 구현해보기. * 어차피 시험 기간ì´ì–´ì„œ ëª»í• ìˆ˜ë„ ìžˆìœ¼ë‹ˆ 시험 공부하다가 질리면 하ë˜ê°€ ë°”ì˜ë©´ ì•ˆí•´ë„ ë¨. = 후기 = * í•ìƒ ì˜ˆìƒë³´ë‹¤ 빨리 ì§„í–‰ì´ ë˜ì„œ ê±±ì •ìž…ë‹ˆë‹¤. 앞으로는 ìˆ™ì œë¥¼ ë‚´ì•¼ê² ìŠµë‹ˆë‹¤. 시험들 잘보세요. - [ê¶Œì˜ê¸°] * ì •ë ¬ê³¼ 스íƒì„ ë°°ìš°ê³ divide&conquerë„ ì‚´ì§ ë°°ì› ìŠµë‹ˆë‹¤. ì´ì œë¶€í„°ëŠ” ì „í˜€ 모르는 ë‚´ìš©ì´ë¼ 새ë¡ê³ 재미있었습니다. ê¶Œì˜ê¸° ì„ ë°°ë‹˜ì´ ì•Œê¸° 쉽게 잘 가르ì³ì£¼ì…”서 ì´í•´í•˜ëŠ” ë°ì—는 별로 ì–´ë µì§€ 않았습니다. 하지만 스스로 프로그래ë°í•´ë³´ë©´ ì–´ë ¤ìš¸ 듯 í•©ë‹ˆë‹¤ã… ã… ì–´ì¨Œë“ ì´ë ‡ê²Œ ë„ì „ì ì¸ ë‚´ìš©ì„ ë°°ìš¸ 수 있어서 좋습니다. ì„ ë°°ë‹˜ pptë„ ì˜¬ë ¤ì£¼ì„¸ìš”!! ë°”ì˜ì‹ ë° ëŠ˜ ê°ì‚¬í•©ë‹ˆë‹¤ã… ã… - [ì´ì§€ìˆ˜] * 시간 쪼개서 í•´ì£¼ì‹œëŠ”ë° í•ìƒ ëŠ¦ê²Œ 가서 ì£„ì†¡í• ë”°ë¦„ìž…ë‹ˆë‹¤. 성실한 수업태ë„와 착실하게 ìˆ™ì œë¥¼ 함으로 ë³´ë‹µí•˜ê² ìŠµë‹ˆë‹¤. ì´ì œë¶€í„° 슬슬 머리굴리는게 나오는 것 같습니다. 기대ë©ë‹ˆë‹¤ ã…Ž [권준í˜] = ë‹¤ìŒ ìˆ˜ì—… = * ì¤‘ê°„ê³ ì‚¬ê°€ 금요ì¼ì— ë나서 ìƒˆì‹¹ì„ ì§„í–‰í• ìˆ˜ ìžˆì„ ê²ƒ 같으면, 4ì›” 25ì¼ì— ì§„í–‰. * 4ì›” 25ì¼ì— ë¶ˆê°€ëŠ¥í• ê²ƒ 같다면, 5ì›” 2ì¼. = ìˆ™ì œ = == ê¶Œì¤€í˜ == 1. 피보나치 구현 {{{ #pragma warning(disable:4996) #include<stdio.h> int pibo(int num); int main(){ int input = 0; printf("피보나치수 몇번째수를 ì¶œë ¥í• ê¹ì‡¼? : "); scanf("%d", &input); printf("\nì´ê±°ì—ìš” : %d", pibo(input)); } int pibo(int num){ if (num == 1 || num == 2) return 1; int temp = pibo(num - 1) + pibo(num - 2); return temp; } }}} * ì‚½ìž…ì •ë ¬ 구현 n,k를 ìž…ë ¥ë°›ì•„ì„œ 1부터 kë²”ìœ„ì˜ ìˆ«ìžë¥¼ ìž„ì˜ë¡œ nê°œ 받아서 ì €ìž¥í•˜ëŠ”ê±¸ ë™ì í• ë‹¹ì„ ì´ìš©í•´ì„œ 구현해봤습니다 {{{ #pragma warning(disable:4996) #include<stdio.h> #include<time.h> #include<stdlib.h> int random_num(int range); //1부터 rangeê¹Œì§€ì˜ ëžœë¤í•œ ìˆ«ìž í•˜ë‚˜ë¥¼ ê°€ì ¸ì˜´ void insert_sort(int* start_p, int range); void swap(int* a, int* b); int main(){ int number, range; int i, j, temp; int *start_p; srand(time(NULL)); printf("ëª‡ê°œì˜ ìˆ«ìžë¥¼ ì •ë ¬í• ê²ƒìž…ë‹ˆê¹Œ? : "); scanf("%d", &number); printf("숫ìžì˜ 범위는요? : "); scanf("%d", &range); start_p = (int*)malloc(sizeof(int) * (number+1)); *start_p = 0; start_p = start_p + 1;//ì‚½ìž…ì •ë ¬ì„ ìœ„í•´ ì•žì˜ í•œ ê³µê°„ì„ ë¹„ì›Œë‘ for (i = 0; i < number; i++) //ìž„ì˜ì˜ ê°’ì„ ë„£ì–´ì¤Œ { *(start_p + i) = random_num(range); } printf("ìž„ì˜ë¡œ ë°°ì—´ëœ ìˆ«ìžë“¤ìž…니다.\n"); for (i = 0; i < number; i++) //ì¶œë ¥í•´ì£¼ìž { printf("%d ", *(start_p + i)); } insert_sort(start_p, number); printf("\nì‚½ìž…ì •ë ¬ ë˜ì—ˆìŠµë‹ˆë‹¤.\n"); for (i = 0; i < number; i++) //ì¶œë ¥í•´ì£¼ìž { printf("%d ", *(start_p + i)); } printf("ë"); } int random_num(int range){ return (rand() % range) + 1; } void insert_sort(int* start_p, int range) //start_pì˜ ì•ž 한ìžë¦¬ëŠ” 0으로 ë˜ìžˆë‹¤ëŠ” ì „ì œì´ë‹¤ { int i, j, temp; for (i = 0; i < range; i++) { for (j = i; j >= 0; j--)//-1까지는 jê°€ ë‚´ë ¤ê°ˆ 수 있다 { if (*(start_p + j) < *(start_p + j - 1)) swap((start_p + j), (start_p + j - 1)); else break; } } } void swap(int* a, int* b){ int temp = *a; *a = *b; *b = temp; } }}} * ìŠ¤íƒ êµ¬í˜„ {{{#pragma warning(disable:4996) #include<stdio.h> #include<time.h> #include<stdlib.h> int scale_of_stack; //스íƒì˜ í¬ê¸° int top_of_stack; //스íƒì˜ 성분 갯수. 7ì´ë©´ 7ê°œ 있는거다 int Pop(int *start_p); //0ì´ë©´ 실패(스íƒì— ì•„ë¬´ê²ƒë„ ì—†ëŠ” ê²½ìš°ê² ì ¸? ^^) start_p는 스íƒì˜ 시작 주소 int Push(int *start_p, int input); //1ì´ë©´ 성공, 0ì´ë©´ 실패(스íƒì´ 꽉 ì°¬ ìƒíƒœê² ì ¸? ^^) void Print_Stack(int *start_p); //start_p부터 top_of_stackë§Œí¼ ìŠ¤íƒ ìš”ì†Œë¥¼ ì¶œë ¥í•œë‹¤ int main(){ int i, j, temp = 0, input; int trigger;//분기 ì €ìž¥ int* startp_of_stack;//ìŠ¤íƒ ì‹œìž‘ 주소 printf("ìŠ¤íƒ ë†€ì´ë¥¼ 시작하기 ì „ 스íƒì˜ í¬ê¸°ë¥¼ ì •í•´ì£¼ì„¸ìš”^^ 0으로 초기화ë©ë‹ˆë‹¤ : "); scanf("%d", &scale_of_stack); startp_of_stack = (int*)calloc(scale_of_stack,sizeof(int)); top_of_stack = 0; while (1) { printf("\nì‹ ë‚˜ê³ , 재미나는 ìŠ¤íƒ ë†€ì´! 1=PUSH 2=POP 3=Show Stack 4=End"); scanf("%d", &trigger); printf("\n"); switch (trigger) { case 1: if (top_of_stack == scale_of_stack) { printf("스íƒì´ 꽉 차서 ë„£ì„수가 없네요 ã…Ž"); break; } printf("삽입하실 ìžë£Œë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš” : "); scanf("%d", &input); if (Push(startp_of_stack, input)) printf("ìž…ë ¥ 성공!"); else printf("ì™ ì§„ ëª¨ë¥´ê² ëŠ”ë° ì‹¤íŒ¨í–ˆë‹¤."); break; case 2: if (top_of_stack == 0) { printf("스íƒì´ í…… 벼서 뺄 수가 없네요 ã…Žã…Ž"); break; } printf("ì œì¼ ìœ„ì— ìžˆëŠ”ê±¸ ëºë‹ˆë‹¤.\n"); temp = Pop(startp_of_stack); if (temp != 0) printf("빼기 성공! 뺀 ìžë£ŒëŠ” %d입니다.", temp); else printf("ì™ ì§„ ëª¨ë¥´ê² ëŠ”ë° ì‹¤íŒ¨í–ˆë‹¤."); break; case 3: Print_Stack(startp_of_stack); break; case 4: printf("\në°”ì´ë°”ì´\n"); return 0; default: break; } } } int Pop(int *start_p) //0ì´ë©´ 실패(스íƒì— ì•„ë¬´ê²ƒë„ ì—†ëŠ” ê²½ìš°ê² ì ¸? ^^) { if (top_of_stack == 0) return 0; int temp; temp = *(start_p + top_of_stack); *(start_p + top_of_stack) = 0; top_of_stack--; return temp; } int Push(int *start_p, int input)//1ì´ë©´ 성공, 0ì´ë©´ 실패(스íƒì´ 꽉 ì°¬ ìƒíƒœê² ì ¸? ^^) { if (top_of_stack == scale_of_stack) return 0; top_of_stack++; *(start_p + top_of_stack) = input; return 1; } void Print_Stack(int *start_p) //start_p부터 top_of_stackë§Œí¼ ìŠ¤íƒ ìš”ì†Œë¥¼ ì¶œë ¥í•œë‹¤ { for (int i = top_of_stack; i > 0; i--) //top of stack ì´ nì´ë©´ 1부터 n까지 ì¶œë ¥í•´ì•¼í•œë‹¤. { printf("| %5d |\n", *(start_p + i)); } printf("â””______┘\n"); } }}} == ì´ì§€ìˆ˜ == 1. 재귀함수로 피보나치 수열 구현 {{{ #pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> int fibo(int x){ if (x == 1 || x == 2) return 1; else return fibo(x - 1) + fibo(x - 2); } int main() { int n, i; printf("ì¶œë ¥í•˜ê³ ì‹¶ì€ ìˆ˜ì—´ì˜ í• ê°œìˆ˜ë¥¼ ìž…ë ¥í•˜ì„¸ìš” : "); scanf("%d", &n); for (i = 1; i <= n; i++) printf("%d ", fibo(i)); system("pause"); return 0; } }}} 2. 삽입 ì •ë ¬ 구현 {{{ #pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int *align; int align_n, sort_n, i = 0; printf("ì •ë ¬í• ìˆ«ìžì˜ 개수를 ìž…ë ¥í•˜ì„¸ìš” : "); scanf("%d", &align_n); align = (int *)malloc(sizeof(int)*align_n); printf("ì •ë ¬í• ìˆ˜ì—´ì„ ìž…ë ¥í•´ 주세요(ì •ìˆ˜ %dê°œ) : ", align_n); for (i=0; i < align_n; i++) scanf("%d", align+i); for (int j = 1; j < align_n ; j++){ for (sort_n = j; sort_n > 0; sort_n--){ int temp; if (*(align + sort_n) < *(align + sort_n - 1)){ temp = *(align + sort_n - 1); *(align + sort_n - 1) = *(align + sort_n); *(align + sort_n) = temp; } else break; } } puts("ì‚½ìž…ì •ë ¬ ë˜ì—ˆìŠµë‹ˆë‹¤."); for (int n=0; n < align_n; n++) printf("%d ", *(align+n)); printf("\n"); free(align); system("pause"); return 0; } }}} == ê¶Œì˜ê¸° == * 삽입 ì •ë ¬ {{{ #include<stdio.h> #include<stdlib.h> const int INF = 0x7FFFFFFF; int main(void) { int n; int *number; int i, j; scanf("%d", &n); number = (int *)malloc(sizeof(int) * (n + 10)); number[0] = -INF; for(i = 1; i<=n; i++){ scanf("%d", number + i); } for(i = 1; i<=n; i++){ int temp = number[i]; for(j = i - 1; j>=0 && number[j] > temp; j--){ number[j + 1] = number[j]; } number[j + 1] = temp; } for(i = 1; i<=n; i++){ printf("%4d", number[i]); } return 0; } }}} * 피보나치 {{{ #include<stdio.h> int fibo(int n){ if(n <= 2)return 1; return fibo(n - 1) + fibo(n - 2); } int main(void) { int n; scanf("%d", &n); printf("%d", fibo(n)); return 0; } }}} * ìŠ¤íƒ {{{ #include<iostream> #include<vector> using namespace std; template <typename T> class Stack{ private: vector <T> dataVector; int top_pointer; public: Stack(){ top_pointer = -1; dataVector.resize(20); } ~Stack(){ } void push(T element){ if(top_pointer == dataVector.size() - 1){ dataVector.resize(dataVector.size() * 2); } dataVector[++top_pointer] = element; } T pop(){ if(top_pointer < 0){ } return dataVector[top_pointer--]; } T top(){ return dataVector[top_pointer]; } }; int main(void){ Stack<int> s = Stack<int>(); Stack<char> sc = Stack<char>(); for(int i = 0; i<=100; i++){ s.push(i); sc.push(char(i)); } for(int i = 0; i<=100; i++){ printf("%d\n", s.pop()); printf("%c\n", sc.pop()); } } }}} ---- [새싹êµì‹¤/2014/다빈치ì¸ìž¬ë°˜]