U E D R , A S I H C RSS

새싹교실/2014/다빈치인재반

Difference between r1.78 and the current

@@ -1,11 +1,14 @@
[[TableOfContents]]
= 참여자 =
||강사 || [권영기] ||
||<|3> 새싹 || [금강현] ||
||<|4> 새싹 || [금강현] ||
|| [권준혁] ||
|| [이지수] ||
|| [김정민] ||
* ~~2학기들어 무의미해지고있습니다~~
= 진행 =
* 매주 금요일 오전 10시에 진행합니다. --컴공타임 적용해서 10시 30분에 시작--
* --매주 금요일 오전 10시에 진행합니다.(1학기)-- --컴공타임 적용해서 10시 30분에 시작----
* 매주 화요일 오후 5시에 진행합니다.(2학기)
* 주제는 그날 그날 필요한 것 + 자료구조 PPT
= feedback =
* 새싹교실이 ZeroPage에서 시행되는만큼 4F([ThreeFs] + Future Action Plan)에 맞게 feedback을 작성합니다.
@@ -19,404 +22,30 @@
* 참고로 ZeroWiki는 MoniWiki Engine을 사용하며 Google Chrome이나 Mozila Firefox, Safari보다는 Internet Explorer에서 가장 잘 돌아가는 것 같습니다.
= 수업 일지 =
== 1회차(3월 13일) ==
* [새싹교실/2014/다빈치인재반/1회차]
== 2회차(3월 21일) ==
== 3월 28일 (3회차) ==
=== 예정 ===
* C 메모리 구조.
* malloc, calloc, realloc, free
* 이중 포인터
* 자료 구조? 알고리즘?
* --시간복잡도, 공간복잡도.--
=== 참여자 ===
||강사 || [권영기] || O ||
||<|3> 새싹 || [금강현] || O ||
|| [권준혁] || O ||
|| [이지수] || O ||
== 4월 11일 (4회차) ==  
=== 예정 ===
* 시간복잡도
* 정렬
- 삽입 정렬
* 피보나치 수
- 재귀적 방법
- 순차적 방법
* 시간이 남아서 분할 정복.
- 피보나치 수
- 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/다빈치인재반/2회차]
== 3회차(3월 28일) ==
* [새싹교실/2014/다빈치인재반/3회차]
== 4회차(4월 11일) ==
* [새싹교실/2014/다빈치인재반/4회차]
== 5회차(5월 2일) ==
* [새싹교실/2014/다빈치인재반/5회차]
== 6회차(5월 9일) ==
* [새싹교실/2014/다빈치인재반/6회차]
== 7회차(5월 23일) ==
* [새싹교실/2014/다빈치인재반/7회차]
== 8회차(5월 30일) ==
* [새싹교실/2014/다빈치인재반/8회차]
== 9회차(9월 2일) ==
* [새싹교실/2014/다빈치인재반/9회차]
== 10회차(9월 16일) ==
* [새싹교실/2014/다빈치인재반/10회차]
== 11회차(9월 23일) ==
* [새싹교실/2014/다빈치인재반/11회차]
== 12회차(10월 7일) ==
* [새싹교실/2014/다빈치인재반/12회차]
== 13회차(11월 4일) ==
* [새싹교실/2014/다빈치인재반/13회차]
----
[새싹교실/2014]


1. 참여자

강사 권영기
새싹 금강현
권준혁
이지수
김정민
  • 2학기들어 무의미해지고있습니다

2. 진행

  • 매주 금요일 오전 10시에 진행합니다.(1학기) 컴공타임 적용해서 10시 30분에 시작--
  • 매주 화요일 오후 5시에 진행합니다.(2학기)
  • 주제는 그날 그날 필요한 것 + 자료구조 PPT

3. feedback

  • 새싹교실이 ZeroPage에서 시행되는만큼 4F(ThreeFs + Future Action Plan)에 맞게 feedback을 작성합니다.
    • Facts, Feelings, Findings, Future Action Plan. 즉, 사실, 느낀 점, 깨달은 점, 앞으로의 계획.
    • 예를 들어 지난주에 돈가스를 먹은 것에 대해 후기를 쓴다면 : "지난주에 강남에 가서 하나에 5만원하는 돈가스를 먹었다.(사실) 기대를 잔뜩 했는데 별로 맛이 없었다.(느낌) 강남은 땅값이 비싸서 값만 보고 엄청 맛있을거라 기대하면 안된다는 것을 알았다.(깨달은점) 다음에는 미리 인터넷에서 평을 찾아보고 별점이 높은 돈가스집을 찾아서 가봐야겠다.(앞으로의 계획)"
      • 설마 이것보다 더 짧게 쓰진 않겠죠? 믿을게요
  • feedback은 최대한 성의있게 써주세요.
    • 반드시 ZeroWiki에 작성해주세요. 하위 페이지를 만드는 것도 허용합니다.
    • 여러분들이 배운 내용을 정리해주세요. 학습효과가 더 커집니다.

  • 참고로 ZeroWikiMoniWiki Engine을 사용하며 Google Chrome이나 Mozila Firefox, Safari보다는 Internet Explorer에서 가장 잘 돌아가는 것 같습니다.

4. 수업 일지

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:50
Processing time 0.1429 sec