티스토리 뷰


지난 글에서 엑셀 매크로 프로그래밍을 통해서 로또 프로그램을 만들어 보았습니다. 

하지만 로또 프로그램에 어마무시한 버그가 있었죠. 아! 그 글을 못보셨다구요. 그럼 아래의 링크를 참조하세요.



이번 글에서는 위의 로또 프로그램의 버그인 중복 수를 없애는 방법에 대해서 알아볼까 합니다.

중복을 없애기 위해서 Collection이라는 개념을 사용해 보았는데요.


Collection(이하 콜렉션)이란 동일한 데이터 타입의 데이터를 관리하고 저장하기 위해서 사용되는 자료구조 중 하나라고 보면 됩니다.

콜렉션은 다음에 시간을 가지고 추가적으로 설명을 드리도록 할께요. 


콜렉션에 대해서 지금 당장 알고싶다면 아래의 링크를 이용하세요

About Collection

https://msdn.microsoft.com/en-us/library/a1y8b3b3(v=vs.90).aspx


먼저 코드를 살펴보도록 하겠습니다.


' 중복수가 없는 로또 프로그램

Sub DoLotto()


    Dim collection As New collection 'Collection 추가

    Dim index As Integer 'For문 인덱스

    Dim currentValue As Integer '현재 랜덤값

    

    Range("A1:B7").Font.Size = 9

    

    ' 1부터 45까지의 값을 생성

    For index = 1 To 45

        collection.Add (index)

        

    Next

    

    For index = 1 To 6

        currentValue = Int(collection.Count * Rnd + 1)

        

        Cells(1, index) = CStr(index) + "번째 값"

        Cells(2, index) = collection(currentValue)

        

        collection.Remove (currentValue) ' 나온값은 Collection에서 삭제, 중복값 방지

    

    Next

    

    Cells(1, 7) = "보너스 번호"

    Cells(2, 7) = Int(collection.Count * Rnd + 1)


End Sub


코드리뷰 (Code Review)

- 콜렉션에 1부터 45의 값을 넣는다.

- 랜덤수를 생성하여 콜렉션의 인덱스로 이용하고, 콜렉션의 값을 가져온다.

- 생성된 랜덤수에 대한 콜렉션의 해당값을 삭제한다. 이러는 경우 콜렉션에 저장된 값의 갯수는 하나가 줄어든다.

- 콜렉션에서 값을 하나 삭제하면, 랜덤수 생성을 1-45가 아닌 1-44사이의 값을 만든다. (2개를 삭제하면 1-43까지의 값)

- 6번을 반복한다. 이미 콜렉션에서는 로또 번호로 쓰인 값은 삭제가 되었기 때문에 중복이 발생하지 않는다. 



구스야! 코드 리뷰 설명이 이따구냐...


코드 리뷰를 간단히 해보았는데요. 이해가 안가시면 질문을 해주세요.

댓글을 통해서 질문하시면 성실히 답변을 달아드리겠습니다. 


그럼 코드를 실행해 볼까요. 코드를 위와같이 작성해 봅니다. 



코드는 직접 쳐보시는게 좋아요. 


코드를 치면서 프로그래밍이 어떤식으로 처리가 되고, 

알고리즘이 어떤식으로 처리가 되는지 여부를 이해하시는게 가장 좋습니다. 


코드를 실행하면 아래와 같은 결과를 얻습니다.

몇 번을 실행해도 동일하게 중복이 없는 로또 프로그램을 만들 수 있습니다. 



디버깅을 성공하였도다!!!! 구웃!



이번 글에서는 엑셀 매크로 프로그래밍를 이용하여 로또 프로그램을 만들어보았는데요.

지난번 버전에서 생긴 중복 버그에 대한 수정 방법을 제시하였습니다.

그럼 이만 줄이겠습니다.


이 글이 도움이 되셨으면, 아래의 하트를 눌러주세요.

댓글