로또란 기본적으로 45개 중에 하나를 뽑고, 남은 44개 중에 하나를 뽑고... 의 과정을 6번 반복하는 것이다.
R은 사실 반복문을 썩 좋아하지 않는다. 반복문을 쓸 바에는 벡터로 만드는 게 낫다는 철학.
예를 들어 다음과 같이 for()를 사용하면 반복문을 만들 수 있다.
i 가 45에서 시작하여 40이 될 때까지 괄호{ } 안의 내용이 반복된다.
하지만 R은 이렇게 하느니, 45부터 40까지 벡터를 만들어서 다음과 같이 처리하는 쪽을 권장한다.
prod() 는 product 의 약자로, 벡터의 모든 요소를 곱해 주는 함수다.
어쨌든 45개 중 1개, 44개 중 1개... 를 6번 실행할 때 가능한 모든 경우의 수는 5864443200 이라는 것을 알았다.
큰 숫자이므로 콤마(,)를 찍어 보자. format() 함수의 [big.mark=] 옵션을 이용한다.
대략 58억 정도 되는가 보다.
그런데 숫자를 1, 2, 3, 4, 5, 6 을 뽑든 6, 5, 4, 3, 2, 1 을 뽑든 당첨은 마찬가지가 아닌가?
순서에 상관없다는 이야기다.
순서에 상관 없으니 6가지 숫자를 이렇게 저렇게 배열할 수 있는 총 경우의 수를 알아야 할 것이다.
그것은 6개 중 1개를 뽑고, 남은 5개 중 1개를 뽑고... 의 과정을 6번 실행하는 것과 동일하다.
720가지 경우가 있다고 한다.
그러므로 위의 5864443200 에서 중복인 720 을 제하면
대략 814만 분의 1이 로또 확률이 되는 것이다.
알겠지만 여기까지 이야기한 '45개 중 순서에 상관 없이 6개를 뽑는' 수식은 다음과 같이 쓰고
R은 '45개 중 순서에 상관 없이 6개를 뽑는' 경우의 수를 choose()라는 함수를 통해 간단히 지원한다.
내가 뽑은 숫자가 단 하나도 맞지 않을 확률은 어떻게 될까?
45개 번호 중 당첨번호 6개를 제외한 39개 중에 6개를 뽑는 경우의 수를 따지면 되겠다.
그러므로 확률은
약 40% 정도.
혹 연금복권도 궁금한 분이 계실까 봐.
연금복권의 번호는 100,000 부터 999,999 까지 부여된다. 가능한 번호의 개수는 총 900,000개
혹은 다음과 같이 계산해도 되겠다.
6자리 숫자이며, 첫 자리에는 0을 제외한 1부터 9까지 숫자가 할당 가능하고, 나머지 자리에는 0부터 9까지의 숫자가 가능하므로
9e+5 은 900,000을 의미하며, 이런 표기 방식을 과학적 표기법(scientific notation)이라 한다.
과학적 표기법을 사용하고 싶지 않다면 format()의 [scientific=] 옵션을 사용한다.
여하튼 가능한 번호의 개수는 90만 개이며, 거기에 1조부터 7조까지 총 7세트가 있다.
그러므로 연금복권의 총 개수는
630만 장이다.
이 중에서 1등은 2장이므로
연금복권의 1등 당첨확률은 315만 분의 1이다.
'R' 카테고리의 다른 글
[R.아르] 통계 프로그램 R 설치하기 (0) | 2017.10.11 |
---|---|
[R.아르] 특정 단어가 들어있는 문장 추출하기 (0) | 2016.12.06 |
[R.아르] 문장에서 보통명사만 추출하기(2) (2) | 2016.12.06 |
[R.아르] 문장에서 보통명사만 추출하기(1) (4) | 2016.12.06 |
[R.아르] 문장에서 명사 추출하기 (5) | 2016.11.22 |
[R. 아르] 숫자를 날짜로 바꾸기 (0) | 2016.10.28 |
[R.아르] R에서 엑셀의 vlookup()처럼 첫 번째 값만 가져오기 (0) | 2016.10.28 |
[R.아르] 주별 합계 구하기 cut() (2) | 2016.10.24 |
[R.아르] R에서 월별 합계 구하기 / 글자 일부분 자르기 substr() (1) | 2016.10.14 |
[R. 아르] 반복되는 값 추가하기 rep() (0) | 2016.10.11 |
댓글