웹서비스 관련된 과제를 하면서 작성했던 주민등록번호 유효성 검사에 대한 메소드를 구현해 보겠다. 먼저 주민등록번호는 유효성을 검사하는 일종의 공식(?) 이 있다. 차근차근 방법을 따라가 보자. 예를들어 주민등록번호가 123456-1234567 이라고 하면 계산방법은 다음과 같다. 1. 검증코드를 제외한 나머지 값들을 미리 지정된 값에 숫자를 하나씩 하나씩 모두 곱한다. 2. 각 자리수에서 곱한 숫자들을 모두 더한다. 3. 더한 결과를 11로 나누어 나머지를 구한다. (나머지 연산 %) 4. 11에서 나머지의 결과를 빼준다. 5. 연산을 통해 얻어진 값과 위에서 구했던 검증번호가 일치하는지 검사한다. 123456-1234567 이라는 주민등록번호에서 검증번호는 7이고, 연산 결과 얻은 값은 ..
2차원 배열을 동적할당으로 생성해 보겠다. 먼저 간단하게 소스를 보면 다음과 같다.#include #define SIZE 10int main(void){ int i=0, j=0; int** A; // 동적할당 A = (int**)malloc(sizeof(int*)*SIZE); for(i=0;i 프로그램을 실행시켜보면 다음과 같이 잘 돌아가는 모습을 확인할 수 있다. 2차원 배열을 쓰기 위해서는 먼저 더블포인터를 이용해야 하고, 이를 할당하기 위해서는 반복문을 이용해야 한다. 위의 예제 코드에서는 10 x 10 사이즈의 배열을 생성하여 모든 값에 1을 저장후 출력해본뒤 free 시키는 단계로 작성된 것이다. 그리고, 마지막으로 free 시켜줄 때에도 반복문을 이용해서 free 시켜줘야 하는데 이때 ..
랜덤하게 2진트리를 생성하고, 각각의 방식 (Preorder, Inorder, Postorder) 으로 출력하는 프로그램을 만들어 보았다. 먼저 랜덤하게 생성되는 트리는 중복되지 않는 20개의 숫자를 랜덤하게 생성하여 이진트리로 만들었다. 랜덤하게 생성된 이진트리의 구조는 다음과 같다. 이를 각각의 방식으로 출력해주는 함수를 만들어 출력해 주었다. 출력함수는 다음과 같다. Preorder 방식void PrintPreorder(node* tree){ if(tree != NULL) { printf("%d ",tree->data); PrintPreorder(tree->left_child); PrintPreorder(tree->right_child); } else return;} Inorder..
Binary Tree Traversal, 즉 2진트리 탐색에 대해 알아보자. 정보처리기사 시험문제에도 나오는 이론이기 때문에 중요할듯 싶다 ㅋ 이진트리탐색에서 항상 나오는 3가지 방법, Inorder Traversal, Preorder Traversal, Postorder Traversal이 있고, 한가지 더 추가적으로 보자면 Levelorder Traversal을 이야기 할 수 있을 것이다 이들의 방법은 각각 이렇다. 먼저 그림을 보고 이해하자면 다음과 같은 Binary Tree, 즉 2진트리가 있을 때 Inorder는 Left child -> Root -> Right child 순으로, Preorder는 Root -> Left child -> Right child 순으로, Postorder는 Left..
전체 소스 및 보고서 다운받기 다항식을 Linked LIst를 이용하여 표현하기 위해 다음과 같은 node를 구성하였다.typedef struct node { int coef; // 계수 int exp; // 지수 struct node *next;} node; 즉 2x^3 이라는 항이 있다면 node에 coef = 2; exp = 3; 이 저장되는 방식이다. 이러한 다항식을 List로 표현해 보았다. 값으로 0, 0을 가지는 header노드와 -1, -1을 가지는 tail 노드를 포함하여 List형태로 표현한다.node* makePolynomial(int _index){ node* h = (node*)malloc(sizeof(node)); node* s; int i, rannum, ranCoef, c..
Linked List란 다음 그림과 같은 구조로 포인터를 이용하여 List를 만들어 내는 것이다. 즉 데이터와 link를 이용하여 하나의 배열 형태로 이루어 져 있지만 실제로는 List형태로 연결되어 있는 것이다. List를 사용하면 Array를 이용할 때 정적인 방법으로 코드 작성시에 Array 사이즈를 지정해 주던것을 동적인 방법으로 만들어 줄 수 있고, 구조체의 내용에 따라 다양한 data를 이용하여 List를 만들어 낼 수 있다.typedef struct node { int data; struct node *next;}node; 위의 구조대로 node를 만들어 낸다면 구조체의 선언을 위와 같이 해주면 되고, 만약에 int형 data말고도 추가적으로 더 넣고 싶은게 있다면 구조체에 넣어주기만 하면..
괄호가 없는 식일 때 Infix (중위표기식)에서 Postfix (후위표기식) 로 바꾸는 방법을 구현해 보았다. 이 과정에서는 연산자의 위치를 결정하기 위해 STACK을 이용하였다. 보고서 및 전체 소스 다운받으러 가기 예를들어 a+b*c 라는 식을 후위표기식으로 변환한다고 해보자. 연산자를 위한 STACK을 만들고 연산자를 만났을 때 STACK에 저장한다. 이 과정에서 연산자의 우선순위를 생각해 주어야 하는데, 우선순위는 우리가 일반적으로 알고 있는것과 같이 *,/ 가 +,- 보다 더 높은 경우들을 생각하면 된다. 이러한 우선순위를 적용하기 위해 프로그램 내에서 따로 우선순위를 결정해주는 함수를 만들어 주었다.int Oper_order(char oper) //스택 내부의 연산자의 우선순위{ if(..
Postfix로 작성된 수식을 STACK을 이용하여 연산하는 프로그램을 작성해 보았다. 보고서 및 전체 소스 다운로드 연산과정은 다음과 같다. 예를들어 8/2-3 이라는 Infix방식의 수를 82/3- 의 Postfix방식으로 바꾼뒤 STACK을 이용하여 연산을 하게 되면 연산될 두 숫자를 STACK에 저장하고 연산자를 만났을 때 연산, 결과를 다시 STACK에 넣는다. 같은 방식으로 식이 종료될 때 까지 반복하면 STACK에는 전체의 연산 결과가 저장될 것이고, 이를 결과로 출력해 준다.int calculate(char *oper) { int i=0; int j; int temp = 0; // 연산된 값을 저장하기 위한 temp 변수 int temp_mul = 1; // 제곱 연산을 하기 위한 ..
수식의 표기방법에는 Prefix (전위표기법), Infix (중위표기법), Postfix (후위표기법) 이 있다. 예를들어 보자면 위의 표에 나와있는것 처럼 표현할 수 있다. 컴퓨터에서는 수식을 계산할 때 중위표기식으로 표현된 것을 후위표기식으로 바꾼뒤 계산한다. 그리고 이 과정에서 STACK이 사용된다. 예를들어 사용자가 2+3*4 의 연산을 입력하면 컴퓨터는 후위표기법인 234*+ 로 바꾼 뒤 계산하여 14라는 결과를 얻어내는 것이다.
희소행렬을 만드는 과정에서 쓰였던 2차원 배열 전체에서 20%만 값을 할당하는 부분을 검증해 보았다. 이를위해 다음과 같은 코드를 작성해 보았다.int main(){ int i, rannum, count=0; int whiCount=0; int sum=0; srand(time(NULL)); while(whiCount 매번 20%의 확률에 들어올 때 카운트 될 수 있게 하는 프로그램을 10000번 반복시켰을 때 평균적으로 20회 카운트 되는것을 결과로 얻을 수 있었다. 따라서 위의 코드는 신뢰할 만하다는 결론을 얻었다.
- Total
- Today
- Yesterday
- 크롬캐스트2
- LG워치
- LGPay
- 유리스톤칩
- 무료복원
- LG워치 어베인
- 에어팟안드로이드
- 워치어베인
- 오드컨테이너
- 자동차유리스톤칩
- 크롬캐스트
- 글로벌자동차유리
- 증여세셀프신고
- 커플여권케이스
- 글자수 세는 프로그램
- 가죽여권지갑
- 여권케이스
- 커플여권지갑
- 미성년자녀증여세
- 가죽여권케이스
- 글자수 세기 프로그램
- LG페이
- 앞유리돌빵
- AR Stickers
- Chromecast
- AR스티커
- LGG6
- 워치어베인 2nd edition
- chromecast2
- 워치어베인 2nd 에디션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |