본문 바로가기
반응형

전체 글340

[알고리즘] 재귀 - 팩토리얼 재귀 - 팩토리얼 재귀함수, 제대로 이해하려면 제일 어렵다고 생각한다.사실 과제나 개발만하다가 알고리즘을 시작한지 얼마안되서 나도 헷갈리는 부분이 많다.그러나 심화된 문제일수록 재귀함수의 적절한 쓰임이 중요하며자칫 잘못해서 재귀함수를 사용 할 경우 일반적인 함수를 사용할 때 보다연산의 시간이 더 길어 지거나 스택 오버플로우가 발생하므로 정확한 이해가 동반되어야한다.그럼 기초적인 예제를 통하여 재귀함수를 이해해 보도록하자. 팩토리얼, 피보나치, 하노이탑..이 3개의 문제는 재귀함수를 설명하는 대표적인 예제라고 할 수 있다.그 중 팩토리얼을 먼저 풀어보도록 하겠다. 팩토리얼은 N!으로 표기되며 1부터 N까지의 수를 모두 곱하는 연산이다.예를 들어 4!는 1X2X3X4 를 나타내며, 팩토리얼은 고등학교 때 배.. 2017. 4. 18.
[알고리즘] 환형 큐(Circulation Queue) 환형 큐(Circulation Queue) 앞서 나왔던 큐의 포스팅이 너무 길어진 듯 해서 환형 큐는 따로 만들어 보았다. 환형 큐의 등장 배경은 다음과 같다.큐의 head가 변함에 따라 기존에 사용하던 head index를 쓰지 못하는 문제가 발생한다.쉽게 말해, Dequeue를 해버리면 그자리는 다시 못쓰는 것이다.이러한 문제점을 해결하기 위하여 환형 큐를 사용하게 되었다. 파워포인트로 그렸습니다ㅠ 이해가 잘되는 그림일지 모르겠지만 환형 큐의 구조는 다음과 같다.head와 tail이 이동하여도 원형으로 순환(Circulation)하며 같은 공간을 사용 할 수있으므로기존의 큐보다는 효율적이라고 할 수 있다. 1. 환형 큐 123456789101112131415161718192021222324252627.. 2017. 4. 18.
[알고리즘] 큐(Queue)를 이용한 대기번호 큐(Queue)를 이용한 대기번호 자료구조를 배우면 가장 먼저 등장하는 스택, 큐, 링크드리스트.이 중 큐를 이용하여 대기번호 알고리즘을 작성해보겠다. 큐는 선입선출(First In First Out, FIFO)의 구조를 가지고 있으며OS에도 호출과 관련하여 스택과 같이 빈번하게 사용된다. 은행에서 대기번호를 받을 때 먼저 대기표를 받고 자신의 차례를 기다린다.이후 순서가 돌아오면 번호표대로 업무를 보기 시작한다.이와같은 구조는 선입선출의 큐 구조와 동일한 모습을 보인다.따라서 대기번호의 경우 큐로 구현이 가능하다. 1. 배열로 만든 큐(Add-Enqueue) 12345678910111213int add(int num){ if(tail==Q_Capacity){ printf("Queue is Full!").. 2017. 4. 18.
[알고리즘] 배열의 범위 회전 배열의 범위 회전 어떤 배열 A가 있을때 해당 배열의 인덱스 i에서 j 만큼을 회전 시킬 때의 문제이다. [14][15][16][75][68][79][46][25]예를 들어 다음과 같은 배열에 2에서 5까지의 회전이 걸린다면 [14][15][79][16][75][68][46][25]다음과 같이 값이 변하게 된다. 1. Rotation 123456789101112131415161718192021222324252627282930#include void Rotation(int *arr[], int i, int j); int main() { int arr[7] = {12,15,26,24,52,14,17}; int i; Rotation(&arr, 1,4); for (i = 0; i i ; j--) { arr[j].. 2017. 4. 18.
[알고리즘] 두 변수의 값 바꾸기 두 변수의 값 바꾸기 두 변수의 값 바꾸기는 '포인터'를 배우는데 항상 등장하는 예제이다. 예를들면, 상자안에 서로 다른 과일이 있다고 가정하자.쉽게 생각 했을 때 상자속에 과일을 꺼내서 다른 상자로 집어 넣으면 된다.그러나 프로그래밍에서는 위와 같은 동작이 한번에 일어나지 못하므로임시 변수에 값을 저장해 주어야한다. 1. 잘못된 스왑(Swap) 방법 12345678910111213141516171819202122232425#include int swap(int num1, int num2); int main() { int num1, num2; scanf_s("%d %d", &num1, &num2); swap(num1, num2); printf("%d %d \n", num1, num2); return 0;.. 2017. 4. 18.
[알고리즘] 배열의 최대값 구하기 배열의 최대값 구하기 한동안 C를 안해서 그런지 배열이고 뭐고 다 까먹었다.동적 배열은 물론이고 이제 기본 배열마저 다시 책을 뒤져봐야 하다니 난 이제 거의 심각하게 망했다고 보면 될 것같다.알고리즘 잘한다고 개발 잘하는게 아니고 개발 잘한다고 알고리즘 잘하는게 아니던데,물론 나는 둘 다 해당사항없다.책 다시 보면서 공부 좀 해야겠다. 이번 문제는 배열의 최대값을 구하는 문제이다. 1. 배열의 최대값 1234567891011121314151617181920212223#include int main() { int num[5] = {48,26,23,5,7}; printf("%d\n", max_arr(num, 5)); return 0;} int max_arr(int arr[], int arr_len) { in.. 2017. 4. 18.
[알고리즘] 최대최소 최대최소 최대 최소를 구하는 기본적인 문제이다. 사용자로부터 두개의 변수를 받아 최대와 최소값을 출력하는 프로그램을 짜보자 INPUTnum1, num2 OUTPUTmin_nummax_num 1. 모든 계산이 main 함수에 위치한 코드 12345678910111213141516171819202122232425#include int main() { int num1, num2; scanf_s("%d %d", &num1, &num2); if (num1 > num2) { printf("%d\n", num2); } else if (num2 > num1) { printf("%d\n", num1); } if (num1 > num2) { printf("%d\n", num1); } else if (num2 > num1).. 2017. 4. 18.
[알고리즘] C언어 배열을 활용한 Stack 구현 스택(Stack) 스택(stack)은 모든 원소들의 삽입(insert)과 삭제(delete)가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료 구조(linear data structure)로서, 삽입과 삭제가 일어나는 리스트의 끝을 top이라 하고, 다른 끝을 bottom이라 한다. 스택은 종종 pushdown stack이라고도 하는데, 스택의 top에 새로운 원소를 삽입하는 것을 push라 하고, 가장 최근에 삽입된 원소를 의미하는 스택의 top으로부터 한 원소를 제거하는 것을 pop이라 한다. 이와 같은 스택 연상은 항상 스택의 top에서 발생하므로 top 포인터의 값을 1씩 증가 또는 감소시킴으로써 수행된다 시작 소스※ 헤더파일을 이용하지 않고 하나의 소스파일 내에서 구현하였음 123.. 2017. 4. 18.
[JavaScript] private 변수가 있는 클래스 생성 private 변수가 있는 클래스 생성 JavaScript 코드에서 Ajax로 Json 파일을 받아오는 예제를 만드는중이다.서버가 없었지만 나름대로 view 내부에서 MVC패턴을 구현하던 중에 Model 쪽 코드에서 데이터를 관리하기 위해 private 변수가 있는 객체가 필요하게 됐다아래는 실제 예제에서 사용한 private 변수가 있는 클래스 생성 코드 샘플이다 12345678910111213141516171819var dataObjFn = (function() { var json = ["aaaa"]; function dataModelObj() { } dataModelObj.prototype = { getName : function() { return json; } } return dataModelO.. 2017. 4. 18.
반응형