Juwan Park :: 배열 1, 2, 3, 4 ...에서 랜덤 숫자 배열 추출 예제

배열 1, 2, 3, 4 ...에서 랜덤 숫자 배열 추출 예제

★프로그래밍/Ruby :: 2015.09.13 23:04

Ruby의 배열 기능 중 정렬 기능과 섞기 기능을 활용한 예제입니다.

마치 로또복권처럼 1부터 45까지 45개의 숫자가 들어 있는 배열을 무작위로 섞은 후 그 배열에서 6개의 숫자를 추출해 배열을 만들고 출력할 때 보기 좋게 하기 위해 랜덤으로 선택된 6개의 숫자가 있는 배열을 오름차순으로 정렬하는 예제입니다.

다음은 이를 구현한 코드입니다.

n_max = 45   #전체 숫자 수
n_sel = 6    #고를 숫자 수
n_times = 5  #고를 횟수
d = []

for i in 1..n_max
  d.push i  #숫자를 1부터 차례대로 넣기.
end

for i in 1..n_times  #고를 횟수만큼 반복
  d.shuffle!         #숫자 섞기.

  nn = n_sel - 1     #고를 숫자 수에서 1 빼기.
  d_sel = d[0..nn]   #고를 숫자 수만큼 배열을 추출.

  d_sel.sort!        #고른 숫자 집합을 정렬.

  print "추첨 결과: "
  for j in 0..nn
    #고른 숫자 수만큼 출력 (폭을 동일하게)
    print sprintf("%2d ", d_sel[j])
  end
  puts   #줄바꿈
end

이 코드의 알고리즘을 설명하자면 다음과 같습니다.
- 1행~3행: 먼저, 전체 숫자 집합 수(여기서는 45개)와 그 중 고를 숫자 수(여기서는 6개), 랜덤으로 숫자 조합을 고를 횟수(여기서는 5개)를 미리 선언합니다.
- 4행: 전체 숫자 집합을 넣을 배열을 미리 설정해 둡니다.
- 6행~8행 1부터 전체 숫자 집합 수까지 하나씩 전체 숫자 집합 배열에 삽입합니다.
- 10행~24행: 랜덤으로 고를 횟수만큼 반복합니다.
-- 11행: 전체 숫자 집합을 무작위로 섞습니다.
-- 13행~14행: 배열의 처음은 0이므로 고를 숫자 수에서 1을 뺀 수를 임시 변수로 설정하고 전체 숫자가 있는 배열에서 0번부터 그 임시 변수 값 번호까지의 숫자를 선택된 숫자 집합 배열에 넣습니다. 전체 숫자 배열은 11행에서 이미 섞여 있으므로 선택된 숫자 집합 배열에 들어갈 수는 랜덤입니다.
-- 16행: 보기 좋게 하기 위해 선택된 숫자 배열을 정렬합니다.
-- 18행: 화면에 '추첨 결과: '라는 텍스트를 표시합니다. 그 뒤에 숫자가 바로 표시되게 하기 위하여 행갈이를 하지 않습니다.
-- 19행~22행: 선택된 숫자 집합 배열의 숫자들을 그 수만큼 표시합니다. 배열 번호가 0부터 시작되어 배열 마지막 번호는 원소 개수보다 1 작기 때문에 13행의 임시 변수를 활용합니다. sprintf문을 이용하여 보기 좋도록 숫자가 가지런하게 배치되는 서식을 지정합니다.
-- 23행: 다음 추첨을 위해 행갈이를 합니다.

이런 구조입니다. 유용하게 활용하시기 바랍니다.

Today 5    Yday 37    Tot 65,556
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP