[R] 로또 게임 (Lotto Game)

해당 포스트는 R에서 난수 추출 방식을 이용하여 로또 게임 함수를 만드는 방법에 대해 소개합니다.

lotto-game-using-r

INTRO

처음 프로그래밍을 공부하던 시기에는 다양한 이론 공부들보다 실습하는 시간이 좋았고, 그 중에서도 어렵지 않은 게임을 구현하는 실습을 좋아했습니다. 공부한 내용을 기반하여 결과를 출력하는 완성된 코드를 작성했다는 성취감도 있었지만, 아직은 부족하지만 (많이) 보완 된다면 실제 생활에 활용 가능한 결과물 될 수 있다는 것에 성취감을 더 크게 느꼈던 것 같습니다.

로또 게임은 목적에 따라 좀 더 현실감있게 만들 수 있겠지만, 아래에서는 입문자 분들이 구현할 수 있도록 난수를 이용해 로또 번호 6개를 추출하는 함수를 만들어 보겠습니다.


lotto-game-using-r
[출처] 네이버 지식인

질문

R프로그래밍 질문 2) 로또 함수 만들기


풀이

로또 함수는 목표 수준에 따라 다양한 구현 방식이 존재할 수 있습니다. 시뮬레이션 함수를 만들수도 있고, 보너스 번호 개념을 적용할 수도 있고, 기존 등장 확률을 활용하여 나만의 로또 함수를 만들수도 있습니다.

하지만 아래에서는 R프로그래밍 입문자를 대상으로 설명하기 위한, '사용자 정의 함수'와 '난수 생성 함수'를 사용하여 설명할 예정이며, 절차는 아래와 같습니다.

  1. 사용자 함수 lotto() 생성
  2. lotto() 함수를 실행하면 1부터 45까지의 번호 중 6개 출력 (중복이 없어야 함)

1.사용자 함수 lotto() 생성

R에서 사용자 함수를 생성하는 방법은 function() 함수를 이용하면 됩니다.

lotto <- function(){
  print("로또 번호 6개를 출력합니다.")
}

lotto()
[1] "로또 번호 6개를 출력합니다."

2. lotto() 함수를 실행하면 1부터 45까지의 번호 중 6개 출력 (중복이 없어야 함)

R에서 랜덤값을 추출해 주는 함수는 sample() 함수가 있으며, 추출 대상 숫자의 범위, 개수, 복원/비복원 유무, 추출 확률 등을 옵션에서 조정할 수 있습니다.

sample(x, size, replace = FALSE, prob = NULL)

  • x : 추출 대상이 되는 숫자의 범위
  • size : 추출하려는 숫자의 개수
  • replace : 복원/비복원 여부 (TRUE = 복원 추출, FALSE = 비복원 추출)
  • prob : x의 각 숫자별 추출 확률 지정

아래 sample() 함수를 말로 설명한다면 아래와 같습니다.

1:45의 숫자에서 6개의 숫자를 랜덤 추출하는데, 추출 방식은 비복원 추출(replace = FALSE) 방식으로 한다.

lotto <- function() {
  print("로또 번호 6개를 출력합니다.")
  lotto_list <- sample(1:45, 6, replace = FALSE)

  return(lotto_list[order(lotto_list)])
}
> lotto()
[1] "로또 번호 6개를 출력합니다."
[1]  1  6  8 13 19 40
> lotto()
[1] "로또 번호 6개를 출력합니다."
[1]  1 28 30 38 40 45
> lotto()
[1] "로또 번호 6개를 출력합니다."
[1]  7 14 21 34 39 43
> lotto()
[1] "로또 번호 6개를 출력합니다."
[1]  3 14 16 21 33 34

참고로, 위 함수는 랜덤 추출 방식이기에 실행할 때마다 다른 결과가 출력됩니다.

마무리

R프로그래밍을 공부하면서 배운 내용 기반으로 간단한 게임을 기본적인 부분부터 만들어 본다면, 눈으로 확인되는 결과물을 만들었다는 성취감을 느낄 수 있습니다. 그리고 학습을 진행하면서 조금씩 기능을 더 붙여나간다면 프로그래밍 능력도 늘어나고 나만의 완성된 함수를 만들어 볼 수 있을 것 입니다.

관련 링크

[1] 네이버 지식인