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

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

★프로그래밍/Ruby :: 2015. 9. 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 54    Yday 89    Tot 77,340
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP