2. 조장 : 2008 고충욱
조원 : 2009 김시백
2011 안영준
2011 정진아
2011 최보은
차 례
1. 프로젝트 설명
2. 일 정
3. 업무분담
4. 초 안
- 알고리즘 및 소스
3. 5. 문제점
6. 해결소스
7. 회의록
1. 프로젝트 설명
과제 1
다음을 정렬하시오
○ 10~ 29 까지 두 자리 정수가 적힌 20 장의 카드가 있다고 하자. 카드를
무작위로
섞었다. 다음 방법을 이용하여 정렬하고 설명에 답하시오, 각 방법을
사용하고 난
후에는 다시 무작위로 섞었다고 하자.
방법 1
⦿ 가장 큰 수가 나올 때까지 찾아서 이 카드를 테이블 위에 앞면이 위로
오도록 놓는다.
처음부터 다시 그 다음 큰 수를 찾아서 그 카드 위에 놓는다. 이 과정을
모든 카드를
찾을 때까지 반복한다. 정렬되었는가?
4. - 전체 카드를 몇 번 보아야 하는가?
최소 : 20 번 ⇒ 모든 경우에서 찾는 수가 가장 먼저인 경우
최대 : 20!번 ⇒ 모든 경우에서 찾는 수가 가장 마지막인 경우
- 최악의 경우는 어떻게 초기화 되었을 경우인가?
⇒ 가장 큰수가 마지막으로 초기화 되는 경우
- 최선의 경우는 어떻게 초기화 되었을 경우인가?
⇒ 가장 큰수가 처음으로 초기화 되는 경우
- 시간 복잡도는 얼마인가?
⇒ O(n!) = n!, Ω(n) = n
방법 2
⦿ 카드를 두 뭉치로 나눈다. 하나는 첫 수가 1 인 것이고 다른 하나는 첫
수가 2 인 것이다.
각 뭉치를 방법 1 을 사용하여 두 번째 수를 정렬한다. 첫 번째 뭉치를 두
번째 뭉치
위에 놓는다. 정렬되었는가?
- 카드의 비교 수는 얼마인가? 20 + 10! + 10! + 1
20:두 뭉치로 나눈다, 10!:방법 1 을 정렬, 1:첫 수가 1 인지 2 인지 뭉치비교
방법 3
⦿ 카드의 두 번째 수를 이용하여 10 개의 뭉치(0~9)로 나눈다. 이제 두
번째 수가 0 인
뭉치를 집어서 첫 번째 수를 보고 두 뭉치로 나누고 뒤집어 놓는다. 두
번째 수가
5. 1 인 뭉치를 집어서 다시 첫 번째 수를 보고 두 뭉치로 나누어 앞의 뭉치
위에 뒤집어
놓는다. 모든 카드에 대해 반복한다.
- 카드의 비교 횟수는 얼마인가?
최악의 경우 :20 + 55 + 10 + 1
20:10 개의 뭉치(0~9)로 나눈다, 55:최악의 경우로 두 번째 수가 가장 작은
수를 마지막에 집는다, 10:한 뭉치를 첫 번째 수로 비교, 1:첫 수가 1 인지
2 인지 뭉치비교
최선의 경우 :20 + 10 + 10 + 1
20:10 개의 뭉치(0~9)로 나눈다, 55:최악의 경우로 두 번째 수가 가장 작은
수를 집는다. 10:최선의 경우로 두 번째 수가 가장 작은 수를 처음 집는다,
1:첫 수가 1 인지 2 인지 뭉치비교
두 가지 세기(Counting)의 방법
문제. 원형의 탁자에 5 쌍의 부부가 앉으려고 한다. 이 때,남자와 여자는 교대로 앉아야 하고,
부부는 옆에 나란히 앉을 수 없다고 한다. 그러면 앉을 수 있는 방법은 모두 몇 가지나 되는지
알아보시오.
일상 생활 중에서 우리는 위의 문제와 같은 많은 상황을 만나게 되며, 우리는 이와 같은 문제를
해결하기 위하여 여러 방법의 세기(counting)를 잘 하여야 한다.
일반적으로 세는 방법에 있어서
(1) 순서(order)를 고려하던지 또는 고려하지 않던지;
(2) 반복(repetition)을 허락하던지 또는 허락하지 않던지
6. 등을 고려하여 여러 조건 하에서 선택이나 분포를 counting 하는 것은 중요한 문제이며 ,
지금부터 차례대로 알아보기로 합시다.
예제 1. 개인사물함에 두 자로 된 명찰을 붙여서 구분 하려고 한다. 한글 `가, 나, 다, ... , 파, 하 `
의 14 자
중에서 한 글자와 수자 `0, 1, 2, ... , 8, 9`의 열 개중 한 수자를 사용하려고 한다. 이 때 사물함을
구별할 수 있는 명찰을 몇 개 만들 수 있는지 알아보시오.
풀이. 사물함의 명찰의 모양은
한글 : 수자 (예를 들면, 가 3 )
수자 : 한글 (예를 들면, 4 라 )
의 경우가 가능하므로,
한글 : 수자 의 경우는 14 x 10 = 140 (가지)
수자 : 한글 의 경우는 10 x 14 = 140 (가지)
따라서, 구별할 수 있는 사물함의 명찰의 개수는 모두 140 + 140 = 280 (개) 이다.
위 예제 1 에서 알 수 있듯이, k 개의 가능성이 있는 일이 독립적으로 시행될 수 있고, 또 각각의
경우의 수가 m1, m2, ..., mk 일 때, 가능한 전체의 경우의 수는 모두
이다. 이것을 합의 법칙 (the addition principle)이라고 한다.
각각의 경우의 수가 m1, m2, ..., mi 인 연속된 일을 시행할 때, 가능한 전체의 경우의 수는 모두
이다. 이것을 곱의 법칙 (the multiplication principle)이라고 한다.
이 두 가지 법칙은 모든 경우의 세기 문제에 있어서 가장 기본적인 법칙이다.
예제 2. 15 명의 회원을 가진 어떤 모임이 있다. 이 때, 회장, 부회장, 총무, 감사를 각각
선출하려고 한다.
가능한 경우의 수는 모두 몇 가지인가 ?
풀이. 회장, 부회장, 총무, 감사를 연속하여 선출하여야 하므로, 곱의
법칙에 의하여
7. 15 x 14 x 13 x 12 (가지)
예제 3. 빨간 주사위 R 과 파란 주사위 B 를 동시에 던질 때 나올 수 있는 눈의 경우의 수를
구하여 보시오.
또, 동일한 두 주사위를 던질 때 나올 수 있는 눈의 경우의 수도 구하여 보시오.
풀이.
(1) 빨간 주사위 R 의 눈이 나올 수 있는 경우의 수는 6 가지
파란 주사위 B 의 눈이 나올 수 있는 경우의 수는 6 가지
따라서 곱의 법칙에 의하여 구하는 경우의 수는 모두
6 x 6 = 36 (가지)
이를 구체적으로 구하여 보면, 빨간 주사위 R 과 파란 주사위 B 의 나온 각각 눈을 r, b 라 하고
순서쌍 (r, b)로 표시하면
(1,1), (1,2), (1,3), (1,4), (1,5), (1,6)
(2,1), (2,2), (2,3), (2,4), (2,5), (2,6)
...
(6,1), (6,2), (6,3), (6,4), (6,5), (6,6)
(2) 동일한 두 주사위를 던지는 경우에 위의 경우에서의 (1,2)와 (2,1)은 구별할 수가 없고, 같은
모양으로 이해되므로 가능한 전체의 경우의 수는 모두
1 + 2 + 3 + 4 + 5 + 6 = 21 (가지)
위 예제는 우리가 곧 학습할 중복순열과 중복조합의 전형적인 예로서,
경우 (1)은 중복순열 이고,
경우 (2)는 중복조합 이다.
순서가 있는 선택의 문제 (Ordered choices)
m 개의 대상으로부터 r 개를 선택할 경우에,
8. (1) 중복을 허락하는가?
(2) 순서를 고려하는가?
를 고려하여 경우의 수를 계산하여야 한다.
S 가 공집합이 아닌 집합일 때, 중복을 허용하고 순서를 고려하여 r 개를 선택한
부분집합을 S 의 r 표본(r-sample)이라 한다.
S 의 원소의 개수를 n 이라 하고, r 표본의 개수를 구하여 봅시다.
먼저 순서를 고려하므로 r 개의 방을 먼저 순서대로 나열하고
□ □ □ … □
각 방에는 S 의 원소 n 개 중에서 임의로 한 개를 선택할 수 있으므로 곱의 법칙에 의하여
n×n×…×n= nr 이며, 이것을 중복순열이라고 부른다
정리 1. S 의 원소의 개수를 n 이라 하면, r 표본의 개수는 n×n×…×n= nr 이다.
예제 1. 운동복에 0 부터 9 까지의 수자를 사용하여 두 자리 수자를 붙이려 한다. 그러면
중복순열의 수이므로, 102= 100 가지의 운동복 번호를 붙일 수 있다. 즉, 00 부터 99 까지 모두
100 가지이다.
문제 2. 26 자의 영어 알파벳 중에서 5 자 사용하여 임의로 낱말 모양을 만들려고 한다. 가능한
낱말은 모두 몇 가지인가?
컴퓨터의 모든 코드는 모두 0 과 1 을 사용하여 표현된다.
이것을 binary code 라고 한다. 0,1 중 한 개로 이루어진 정보를 1 bit 라 하고 8 bit 를 1byte 라고
한다. 이때, 1byte code 의 가능한 경우의 수를 살펴보면 중복순열의 원리의 의하여
2 x2 x···x 2 =26 = 64 (가지) 가 가능하다.
개인용 PC 는 정보처리 단위에 따라서 8 bit, 16 bit , 32 bit , 64 bit 등과 같이 한 번에 처리할 수
있는 정보양으로 PC 를 구분하여 부르며, 요즘 Pentium Ⅱ processor 를 갖춘 PC 를 64 bit
운영체제인 PC 라고
부른다.
9. 이 때, 4 byte (32bit) code 의 경우의 수를 알아보면 중복순열의 수에 의한 경우의 수는 모두
이다. 이 숫자는 앞에서 학습한 Hanoi Tower 문제에서 나온 숫자에 버금가는
커다란 수이다.
이제 반복이 허용되지 않고 선택의 수에 대하여 알아 보도록 합시다.
집합 S 의 r-sample 중에서 원소가 모두 다른 것들을 우리는 r-순열 (r- permutation) 이라고
부른다. 또, S 의 원소의 개수가 r 인 경우에 S 의 r-순열은 단순히 순열 (permutation) 이라고
한다.
정리 2. S 의 원소의 개수가 n 일 때, r-순열의 수는
이다.
증명.r-순열은 모두 다른 원소를 r 개 골라서 순서대로 나열하는 방법의 수이므로, 곱의 법칙을
사용하면
이다.
기호의 약속
(1) n = r 일 때 :
(2) r = 0 일 때 : 0-순열은 의미가 없다. 그러나 계산의 편의를 위하여 모든 n 에 대하여
로 약속한다.
실제로 n ! 은 Gamma 함수로 정의되는 수의 특수한 경우로 이해되는 수로서, p >0 인
임의의 실수 일 때 함수는 다음과 같이 정의된다 :
그러면 모든 p >0 에 대하여 점화식
가 성립하고, 이 때 특별히 p 가 자연수이면
10. 가 된다. ( 공학수학이나해석학 책을 참조하시오.)
예제 4. 12 명의 회원을 가진 모임에서 서로 다른 직함을 갖는 4 명을 선출하는 방법의 경우의
수는 ?
풀이.
예제 5. 알파벳 A, B, C, D 가 각각 쓰여진 네 장의 카드를 모두 사용하여 만들 수 있는 단어는
모두 몇
가지인가 알아보시오.
풀이.
순서가 없는 선택의 문제 (Unordered choice)
n 개의 원소를 갖는 집합 S 로 부터 r 개의 서로 다른 원소를 순서를 고려하지 않고 선택한
집합을 S 의
r-조합(r-combination)이라고 하고, r-조합의 수를
과 같이 표기한다.
정리 1.
증명. r-순열의 개수는 이고 r 개를 나열하는 방법의 수는 이다.
따라서
11. 예제 1. 12 명의 모임에서 4 명을 임의로 선출 하는 방법의 수는?
풀이.
예제 2. OCU 의 교양과정에는 5 개의 과학 교과목과 4 개의 역사 교과목이 있다. 은지는 이번
학기에 2 개의
과학 교과목과 2 개의 역사 교과목을 선택하려고 한다. 이 때 은지가 선택할 수 있는 과목의
경우의 수는?
풀이.
예제 3. 7 개의 -(dash)와 5 개의 / (slash)를 한 줄에 나열하는 방법은 모두 몇 가지인가
알아보시오.
풀이. 우선 모두 12 개의 방이 나열되어 있다고 생각하고, 그 중 5 개를 순서에 관계없이 골라서
그 방에 / 를 넣는다고 생각하면 된다. 따라서 구하는 경우의 수는 모두
이다.
또 위의 문제의 풀이에서 7 개의 방을 골라서 - 를 넣어도 되므로
가 되며, 이 두 수는 같다. 즉,
일반적으로, 우리는 조합수에 관한 항등식 을 얻을 수 있다.
예제 4. 영어 단어 MISSISSIPI 의 모든 영어 철자를 사용하여 만들 수 있는 새로운 단어의
개수를 구하여
보시오.
12. 풀이. 영어 단어 MISSISSIPI 는
M 이 1개
I 가 4개
S 가 4개
P 가 2개
이므로 모두 11 자이다. 그러면, 11 개의 방을 나열해 놓고, 먼저 S 를 넣는 방법은
다음에 M 을 넣는 방법은 S 를 넣는 방법은 P 를 넣는 방법은이다.
따라서 구하는 방법의 수는 곱의 법칙에
의하여
이와 같은 중복되어 있는 것들에 관한 순열을 중복순열이라고 한다.
일반적으로 다음의 정리가 성립한다.
정리 2. 전체의 개수가 인 object 를 한 줄에 나열하는 방법의
수는
증명. 위의 예제와 같은 방법으로 생각한다. 즉, n 개의 방이 있을 때, 먼저 n1 개를 고르는 방법은
또 ( n-n1)개 가운데서 n2 개를 고르는 방법은
또, 이와 같은 방법으로 우리가 구하는 전체 경우의 수는
13. 따라서, 구하는 전체의 가지 수는 이다.
위의 정리 2 에서 가능한 경우의 수를 라 쓰며,
이를 다항계수(multinomial coeffcient) 라고 한다. 특히 k=2 인 경우 다항계수는 앞에서 학습한
조합의 수
과 같다 . (왜냐하면, n = n1 + n2 이므로)
원소의 개수가 n 인 집단으로부터 중복을 허용하여 r 개를 고르는 것을 r-선택 (r-selection)이라
하고, 이를 중복조합이라고 한다. 이 때, r 은 n 보다 커도 무방하다. 또, r-선택 중에서 원소가
모두 다른 것을 우리는 r-조합이라고 부른다.
정리 3 . 원소의 개수가 n 인 r-선택의 수(중복조합)는 이다.
증명. 집합 S 를 이라 두자.
각각의 r-선택을 r 개의 - 와 (n-1) 개의 / 로 이루어진 수열로 대응 할 수 있다. 예를
들면, 집합 S 가
일 때,
가 5-선택이라면 이것은 -/--//--/ 와 같다고 생각할 수 있다. 또, s2, s2, s3 는 3-선택으로
이것은 /-/--// 와 같다고 생각한다.
따라서, 우리가 구하는 선택의 수는 정리 3 에 의하여
이다.
예제 5. 알파벳 26 자를 중복을 허락하여 3 자를 골라서 나열하여 만들 수 있는 단어의 수는 몇
개인가?
14. 풀이 . 먼저 중복 조합의 수는 순서대로 나열하는 수는
중복순열이므로
원순열과 기타 배열의 방법
모든 배열의 경우의 수는 모든 기본적인 수 법칙 , 즉 곱의 법칙과 합의 법칙에 의하여 구할 수
있다.
예제 1. 원판을 꼭 같은 넓이로 100 등분하여 수자 1 부터 100 까지 임의대로 쓰려고 한다. 이 때,
가능한 모든 경우의 수는?
풀이. 일렬로 나열하는 방법은 모두 100! 이다. 그런데 수자가 원형으로 나열되어 있으므로, 한
수자를 임의로 고정시키고 나머지는 일렬로 나열 한다고 생각하면 된다 . 따라서 구하는 경우의
수는 (100-1)! 이다.
위의 예제와 같은 순열을 원순열(circular arrangement)이라고 한다.
어떤 성질을 갖는 object 의 counting 은 전체의 경우에서 그 성질을 object 의 수를 빼어서
계산할 수 있다. 이와 같은 방법을 여사건을 이용하여 counting 하는 방법 이라고 한다.
예제 2. 48 장의 트럼프 카드가 있다. 두 장의 카드를 나누어 줄 때,
(1) 적어도 1 장이 ace 일 경우의 수는?
(2) 두 장이 모두 ace 일 경우의 수는?
(3) 한 장 만이 ace 일 경우의 수는?
풀이. (1) 곱의 법칙에 의하여 4×3 가지
(2) 여사건을 이용하여 계산한다. 즉, 두 장이 모두 ace 가 아닌 경우의 수는 모두 48 x 47
가지이므로, 구하는 경우의 수는 52×51 - 48×47 = 396
다른방법으로 ace×ace 가 아닌 것 또는 ace 가 아닌 것×ace 인 경우이므로
15. 4 × 48 = 192 48 × 4 = 192
따라서 구하는 전체 경우의 수는 모두 396 가지
(3) (1)에 의하여 396 - 12 = 384 가지
예제 3. 3 명의 남자와 6 명의 여자가 한 줄로 정렬한다. 이 때, 두 남자는 계속하여 줄서지
않는다고 한다.
정렬할 수 있는 가능한 경우의 수는?
풀이. 먼저 여자들이 정렬하는, 방법을 구하면 6! 이다.
이 때, 여자와 여자 사이의 빈 칸에 남자가 추가되는 것으로 이해하면, 모두 7 칸의 빈 칸
중에서 3 칸을 골라서 나열한 것이므로 따라서 구하는 경우의 수는
예제 4. 1 부터 9 까지의 수자 중에서 연속한 두 수자를 뽑지 않고서 3 개의 수자를 선택하는
방법의 수는?
풀이. 선택한 수를 1, 선택안한 수를 0 으로 표시한다면, 예를 들어 1001010000 은 숫자 1, 4,
6 을 뽑은 것으로 생각 할 수 있다. 따라서, 6 개의 0 이 나열되어 있고 0 사이의 빈칸 7 개
중에서 3 개를 고르면 되므로 구하는 경우의 수는
이다.
출처 : http://web.chungbuk.ac.kr/~wkkim/L51-0005_02_01.html#제 2 절
2. 일 정
일 정 내 용
16. 팀의 팀장을 정하고, 과제에 대해 토의 후 팀원의
12. 4. 11
임무분담을 정함.
k-combination 에 대한 과제 2 의 알고리즘을 구하고,
12. 4. 17
소스의 초안을 완성함.
과제 2 의 소스 초안을 바탕으로 한 문제점을 토의 후
12. 4. 18
최종안을 완성함.
12. 4. 19 보고서 작성 후 검토
3. 업무분담
이 름 분 담 내 용
고충욱 조장임무 및 자료조사
김시백 보고서작성 및 자료조사
안영준 알고리즘을 바탕으로 한 소스구성
17. 정진아 알고리즘 구성 및 자료조사
최보은 알고리즘 구성 및 자료조사
4. 초 안
(1) 알고리즘 및 소스
1.문자를 받는다.(숫자를 받을 때마다 n 갯수를 늘리고 마지막 괄호를 닫을 때 n 개수를 계산해서
arc 에 넣는다.)
2.숫자를 받는다.(cnt)
3.순서를 정해두는 변수에 순서를 저장한다(본 코딩에선 sun[])
4.맨 처음은 문자를 순서대로 cnt 만큼 출력한다.
5.마지막이 아닐 경우 (, )를 출력한다.
6.출력문자중 제일 마지막 문자에 해당하는 sun[]의 수를 올린다.(ex:cnt=3 일 경우-
sun[1]sun[2]sun[3]이 sun[1]sun[2]sun[4]가 된다.)
7.문자를 sun[]에 입력받은 대로 cnt 만큼 출력하고 6 번부터 다시 실행한다.
8.만약 sun[현재숫자]이 더 이상 커질 수 없을 때 sun[현재숫자-1]이 한칸을 옮기고
sun[현재숫자]는 sun[현재숫자-1]의 뒤에 두고 다시 7 번으로 간다.
9.마지막까지 갔을 때 종료시킨다.
#include <stdio.h>
int main()
{
18. char ch[20];
char v;
int cnt;
int arc;
int b;
int m;
int n;
for(;;){
scanf("%c",&v);
if(v=='{' && m==0){
m++;
}
else if(ch[n-1]!=',' && v=='}'){
break;
}
else if(n==21){
break;
}
else if(v!=','){
ch[n]=v;
n++;
}
}
arc=n-1;
19. b=arc+1;
if(n-1==19){
arc=20;
}
scanf("%d",&cnt);
/*
1. 처음 세 문자를 출력한다.
2. 다음에 마지막 한문자를 뒤로 옮겨서 재 출력한다.
3. 마지막 문자가 마지막에 닿았을때 그 앞순서문자를 뒤로 한칸옮긴다.
4. 마지막 까지 출력을 다하면 끝낸다.
*/
scanf("%d",n);
}
5. 문제점
프로그램에서 원소와 선택하는 방법의 수를 입력하였지만, 이것을 토대로 출력
값이 알맞게 생성되지 않음.
6. 해결소스
#include <stdio.h>
int main()
{
char ch[20];
char v,w;
20. int sun[20];
int cnt;
int arc;
int in[20];
int x,y,z;
int m=0;
int n=1;
int l;
int a=0,b,c;
for(y=1;y<=20;y++){
sun[y]=y;
}
for(;;){
scanf("%c",&v);
if(v=='{' && m==0){
m++;
}
else if(ch[n-1]!=',' && v=='}'){
break;
}
else if(n==21){
break;
}
else if(v!=','){
23. 1. 문제 파악
2. 업무 분담
회의안건
3. 앞으로의 계획 설정
4. 방법 1, 2, 3 논의
내 용 비 고
-주제 정렬(sorting)에 대해 간단한 토의
-업무분담
: 조장 - 고충욱
보고서 - 김시백
자료조사 - 정진아, 최보은
소스코딩 - 안영준
회의내용
-방법 1, 2, 3 논의
: 정렬을 사용해 경우의 수 구하기.
정렬(비교 + 이동), 비교 (비교)
-다음 시간까지 관련 용어에 대해 숙지.
-알고리즘 회의
: 입력형태 - {x,y,z}, 최대 20 개까지 입력
~4/17 까지 소스 완성.
<2 차>
회의일시 2012 년 04 월 17 일 조 D3 작성자 11 최보은
참석자 08 고충욱 09 김시백 11 안영준 11 정진아
24. 1. 자료조사 토의
2. 알고리즘 문제점 토의
회의안건
3. 방법 1, 2, 3 논의
4. 앞으로의 일정 계획
내 용 비 고
- 자료조사 토의
: 셈의 원리(합의 법칙, 곱의 법칙)
중복순열, 중복조합, 순열, 조합
각각의 정의와 공식 구현방법에 대해 토의
- 알고리즘 문제점 토의
: ex) {a,b,c} 2 입력 경우 ab -> ac 넘기는 부분 토의
회의내용 회의 후 ~18 까지 소스 완성
- 방법 1, 2, 3 논의
: 셈의 논리(합의 법칙, 곱의 법칙)을 이용해 회의 후 결과
도출
- 일정
: 다음 시간 최종 소스 이해
최종 보고서 작성
방법 1, 2, 3 을 완벽히 작성
25. <3 차>
회의일시 2012 년 04 월 18 일 조 D3 작성자 11 최보은
참석자 08 고충욱 09 김시백 11 안영준 11 정진아
1. 용어 공식 정리
2. 방법 1, 2, 3 정리
회의안건
3. 최종 소스 이해
4. 최종 보고서 작성
회의내용 내 용 비 고
26. - 중복조합(서로 다른 n 개에서 중복을 허용하여 r 개를
택하는 조합)공식
: nHr = n+r-1Cr 임을 유도 및 토의
- 방법 1, 2, 3 정리
: 보고서에 넣는 양식으로 마지막 최종 정리
- 최종 소스 이해
: 전 회의의 문제점 해결을 바탕으로 소스 구현, 및 소스
이해
- 최종 보고서 작성
: 기초로 만들어진 보고서를 바탕으로 회의를 통해 보고서
작성