본문 바로가기

분류 전체보기582

조건문의 최적화 방법 if 문장 안에 쓴 조건문의 표현 방식에 따라서 속도차이가 발생한다는 것입니다. 요즘 진보된 프로세서에서는 이것마저도.. 아주 훌륭하게 잘 처리되고 있지만.. (실제.. 조건문을 두세단계정도는 미리 계산하는 것이 요즘프로세서던가?? 테스트해보질 않아서.. 하하.. 나중에 기회가 되면 한번 속도 테스트해보아야지.. :) 예를 들어서 조건문 A의 확률이 80%, 조건문 B의 확률이 20%였다면, 다음의 두 조건문은 같은 기능을 하지만 속도에서는 약간 차이가 발생합니다. if(A || B) return; if(B || A) return; 이경우.. 첫번째 조건문은 80%확률로 A 조건을 검사하고, 20% 확률로 A 조건과 B 조건을 검사합니다. 두번째 조건문은 20% 확률로 B 조건을 검사하고 80% 확률로 .. 2011. 9. 16.
11개의 정수 중 6개의 수를 선택하여 6의 배수 만들기 (출처 : KMO) [질문] KMO 17회 2차 (2003년) 중등부 4번 문제입니다. http://www.kms.or.kr/home/kmo/ 4. 임의의 정수 11개가 주어지면, 그 중 6개를 뽑아 그 합이 6의 배수가 되게 할 수 있음을 보여라. 단, 주어진 11 개의 정수가 모두 서로 다를 필요는 없다. [답] 임의의 정수 11개를 홀수는 홀수끼리 짝수는 짝수끼리 짝을 맺는다. 이렇게 하면 합이 짝수인 쌍이 5개가 생긴다. 5개 미만으로는 생길 수 없다. 짝수인 쌍은 2n+0, 2n+2, 2n+4 로 표시할 수 있다. 가장 많은 종류의 쌍이 3개 이상이 있다면, 그 종류의 쌍 3개를 선택해서 더하면 6의 배수가 된다. 가장 많은 종류의 쌍이 3개 미만이 있다면, 모든 종류의 쌍이 존재한다. 그러므로 각각의 종류의 쌍을.. 2011. 9. 16.
소수의 성질을 이용한 문제 (출처 : 수능시험) [문제] 재미있는 문제였던 것 같은데요. 조건만 잘 맞추면 쉽게 맞출 수 있는 문제입니다. \(\frac{1}{p} = \frac{1}{a} + \frac{1}{b}\) 를 만족하는 자연수 a, b, p가 있다. 이 중 p는 소수이고 b > a 이다. 이럴경우 b-a 를 p의 식으로 표현하면 어떻게 될까요? [답] \(\frac{1}{p} = \frac{1}{a} + \frac{1}{b}\) 에서 분모를 모두 없애면, \(ab = p(a+b)\) 가 된다. 여기서 p는 소수이므로, 위의 식이 성립하기 위해서 a가 p의 배수거나 b가 p의 배수여야 한다. a, b는 모두 대칭형이므로 두 변수중 하나를 p의 배수로 설정하여도 무방하다. \(a = pk\) (k >= 1인 자연수) 라고 하면, \(pkb = .. 2011. 9. 16.
로또에서 15명이 1등일 확률 계산 [질문] 이번에 로또 음모론에 편승하여~ 이번 196회차 로또 1등 당첨자가 15명이더군요. 특이한 번호라 사람들이 관심을 많이 갖나봅니다. 확률, 통계 배운지가 까마득 해서 전문지식 가진 사람의 도움을 구합니다. 로또 1등 당첨 확률은 1/8,145,060입니다. 196회차 로또 판매 장수를 X라 했을 때 다음과 같은 계산을 통해 판매 장수가 22,886,748장이라는 것을 알았습니다. (X*1000 - 5000*937,967) * 0.6 = 727,876,520 * 15 : 1등 당첨 금액 총 합은 전체 판매 금액에서 5등 당첨자가 받는 금액을 뺀 금액의 60% 언듯 생각해보면 당첨확률 약 800만분의 1을 생각했을 때 당첨자는 2.8명 근처가 나오는 것이 맞는 듯 보이지만 15명 당첨이 적어도 수 .. 2011. 9. 16.
이중 링크드 리스트 만들기 (Making double linked list) 링크드 리스트가 단일인 경우에는 포인터로 처리하는 것이 좋겠지만, 이중인 경우에는 그게 만만치 않아요. 포인터로 관리하려면, 포인터가 NULL인 경우 처리가 필요합니다. 새로운 노드를 추가하는 경우에는 포인터가 NULL인지 검사해야 하고, 기존 노드를 삭제하는 경우에는 노드의 갯수가 1개인지를 검사해야 합니다. 그래서 사용하는 방법은 바로 이것입니다. 클래스만 설계해보면, class CNode { public: CNode *m_pPrev; CNode *m_pNext; }; class CIntNode : public CNode { public: int data; }; class CDLinkedList { public: CDLinkedList() { m_kRoot.m_pPrev = &m_kRoot; m_kR.. 2011. 9. 16.
미로찾기 프로그램 미로의 크기는 10x10 으로, [0,0] 이 입구, [ 9,9]를 출구로 했습니다. 미로로 사용되는 데이터파일에는 다음과 같은 형식으로 미로가 지정되어 있습니다. 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 ... 1 1 1 1 1 0 1 1 1 0 즉 갈 수 있는 셀(cell)은 0으로 갈 수 없는 셀은 1로 설정되어 있죠. 사용한 알고리즘은 제일 간단한 방법을 사용했습니다. 더 좋은 방법이 당연히 있지만.. 2011. 9. 16.