반응형

언어 자료구조 알고리즘 1251

한글 초성 알아내기

한글 초성 알아내기 원리는 다음과 같습니다. (지식iN질문 답변하다가 만들어 봤습니다.) 입력 문자열이 "가"보다 크거나 같고 "나"보다 작으면 초성은 "ㄱ" 입력 문자열이 "나"보다 크거나 같고 "나"보다 작으면 초성은 "ㄴ" 입력 문자열이 "다"보다 크거나 같고 "나"보다 작으면 초성은 "ㄷ" ...중략합니다... 참고로 한글의 마지막 글자는 힣 인데 C언어에 등록된 마지막 한글은 힛 입니다. 억울할 따름이죠. #include const char *GetInitialSound(const char *han_src) { const char *isarr[14] = {"ㄱ","ㄴ","ㄷ","ㄹ","ㅁ","ㅂ","ㅅ", "ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"}; const char *isarr2[1..

재귀함수 형상화

//아래의 코드를 main함수에서 호출하는 부분을 박스로 타고 들어가는 모습을 형상화해 보았습니다. //유심히 보시고 재귀함수의 원리를 이해하는데 도움이 되었으면 합니다. #include void move(int from, int to) { printf("%d %d\n", from, to); } void A(int n, int from, int by, int to) { if(n==1) move(from, to);// move1 else { A(n-1, from, to, by); // A1 move(from, to); // move2 A(n-1, by, from, to); // A2 } } void main() { A(3,1,2,3); } //형상화 부분 void main() { A(3,1,2,3); in..

간단하게 Random함수 만들기

먼저 3.2GHz컴퓨터다라는 말을 많이 들었을 것입니다. 여기서 3.2GHz라는 말은 CPU클럭이 1초에 3.2 * 1,000,000,000 번 발생한다는 것입니다. 즉, CPU의 연산 처리 속도와 관련이 있다는 것이구요. BOOL QueryPerfomanceOunter(LPLARGE_INTERGER *pli);는 발생한 클럭 수를 얻어오는 interface입니다. 이를 이용해서 간단히 Random을 만들 수 있습니다. 물론, spirit한 정도가 균등하면서 동시에 Random한 좋은 Random이라고 할 수 없겠지만 굉장히 좋은 Random함수가 필요한 것이 아니라면 큰 문제가 되지 않을 것입니다. 물론, 있는 거 걍 사용하는 게 더 낫겠지만... #include #pragma warning (disa..

적분 공식을 이용한 Sin(x)함수 만들기

sin(x)를 구하는 적분 공식은 다음과 같다. sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... 여기서 x는 각도를 얘기하는 것이 아니라 라디안을 얘기를 한다. math.h에서 제공하는 sin()함수도 라디안을 입력 값을 갖는다. 이를 사용할 때 sin(90);과 같이 사용하는 것이 아니라 sin(90/PI);로 사용해야 한다. 암튼, 적분 공식을 이용해서 각도를 입력 매개변수를 받는 함수를 만들어 보자. #include #include double Fac(int n); double SignAngle(int angle) { int i; double rad = (angle%180)/180.0; double mul=0; int sign = 1; for(i=1 ; i

중복되지 않게 랜덤한 카드 발생

프로그래밍을 하다보면 중복을 하지 않으면서 랜덤을 발생해야 하는 문제들이 있다. 하나의 예로 카드를 섞어 보기로 하자. #include #include #include #define MAX_CARD_TYPE 4 #define MAX_CARD_NUM 13 const char *ctypes[MAX_CARD_TYPE]={"♠","♥","♣","◆"}; const char *ntypes[MAX_CARD_NUM]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int RandCard(int base[][13]); void PrintCard(int lcnt,int ct,int cn); void main() { int arr[MAX_CARD_TYPE][MAX_CAR..

정보 올림피아드

1. 다음은 일정한 규칙에 따라 수를 늘어놓은 것이다. 빈칸에 가장 알맞은 수는? 1 , 3 , 6 , 11 , 19 , 31 , 48 , ( ) ①65②68③71④74⑤77 2. A, B, C, D, E가 각각 0~9 까지 숫자 중에 하나이고 다른 알파벳은 다른 숫자를 나타낸다. 다음 식을 만족하는 D의 값은? A B × B A A B B C E D B ①0②1③2④3⑤4 3. 1을 7로 나누었을 때 소수점 이하 97번째 자리 수는 다음 중 어떤 것인가? ①1②2③4④5⑤7 4. A◎B는 A를 B로 나눈 몫이고 A⋆B는 A를 B로 나눈 나머지이다. (A◎3)⋆10 = 3일 때 A가 될 수 있는 두 자리 자연수의 개수는? ①8개②9개③10개④11개⑤12개 5. 미국 돈 40 달러는 싱가포르 돈 32 달러..

삽입정렬

삽입정렬 해결할 문제 – n개의 요소로 구성된 배열 A를 정렬하자 §초기_A – Loop A의 카운터 i에 1을 대입 §Loop _A( i temp and j> 0) //Loop invariant: temp’s position is at A[0]-A[j] § swap A[j],A[j-1] § j assign j-1 § A[j] assign temp i assign i+1 수행속도 i번째 요소를 자기 위치에 보내기 - LoopB의 수행속도 :T'(n) T('n) 은 최악의 경우 n-1번 비교한다. 삽입 정렬 - T(n) T(n) = T'(1) + T'(2) + ... + T'(n) = 0 + 1 + ... + (n-1) 즉 O(N*N)이다. 하지만 배열에 데이터를 순차적 보관을 하면서 보관하는 기능을 수행..

반응형