본문 바로가기

👩🏻‍💻Frontend/JavaScript

[JavaScript] 로또 번호 추첨기 만들기

로또 번호 생성 알고리즘을 자바스크립트로 작성해 보자.

 

 

//로또 추첨기
var lotto = [];
while(lotto.length < 6){
	var num = parseInt(Math.random() * 45 + 1);
	if(lotto.indexOf(num) == -1){
		lotto.push(num);
	}
}
lotto.sort((a,b)=>a-b);
document.write(lotto);

 

 

 

1. 1~45개의 숫자 중 랜덤으로 1개의 숫자를 뽑는다.

Math.random();
// 0보다 크거나 같고, 1보다 작은 실수를 랜덤으로 반환하는 메서드 이다.

Math.random() * 45;
// 45를 곱해 0보다 크거나 같고, 45보다 작은 실수를 반환할 수 있도록 만들어준다.

Math.random() * 45 + 1;
//1을 더해 1보다 크거나 같고, 46보다 작은 실수를 반환할 수 있도록 만든다.(1 <= 실수 < 46)

parseInt(Math.random() * 45 + 1);
//실수인 난수를 정수로 변환하는 메서드 parseInt를 사용한다. (소수점을 버린다.)
var num = parseInt(Math.random() * 45 + 1);
// 랜덤으로 뽑은 수를 넣을 공간인 변수 num을 선언한다.

 

 

 

2. 배열을 선언하고 그 배열에 랜덤으로 뽑은 숫자를 넣는다.

var lotto = [];
// 배열선언

var num = parseInt(Math.random() * 45 + 1);

lotto.push(num);
// 배열의 끝에 아이템을 추가하는 push 메서드를 사용해 배열에 변수 num의 값을 넣는다.

console.log(lotto)
// 콘솔창에서 난수가 lotto 배열에 잘 들어갔는지 확인해본다.

1부터 45 사이의 난수가 발생했고, lotto 배열에 추가된 것을 확인할 수 있다.

 

 

 

3. 6개의 숫자를 출력하기 위해 반복한다.

var lotto = [];
	while(lotto.length < 6){
	    var num = parseInt(Math.random() * 45 + 1);
	    lotto.push(num);
        }

for문을 사용해 6번 반복을 지정하게 되면 중복된 값이 있는 경우 문제가 생긴다. 중복된 값이 빠지게 되어 6개의 값이 출력되지 않는 상황이 발생할 수 있다. 따라서  while문을 사용해 6개의 값을 출력할 때 가지 반복한다. 콘솔창 출력 결과를 보면 6개의 값이 배열에 잘 들어간 것을 확인할 수 있다.

  • 반복문 for : 특정 횟수만큼 코드를 동작시킬 때 사용
  • 반복문 while : 특정 조건을 만족할 때까지 계속 반속

 

 

4. 중복되는 값이 출력되지 않도록 조건문 사용

6개의 랜덤 숫자를 뽑아내는 것은 성공했으나, 하나의 배열 안에 중복된 값이 들어갈 수 있는 상황이다. 조건식으로 중복되는 값이 나오지 않도록 만든다.

var lotto = [];
        while(lotto.length < 6){
            var num = parseInt(Math.random() * 45 + 1);
            if(lotto.indexOf(num) == -1){
                lotto.push(num);
            }
        }

indexOf() 메서드는 요소가 배열에 존재하는지 확인하고 배열을 업데이트하며, -1의 값을 가질 경우 배열에 요소가 존재하지 않는다는 의미이다. 위 조건식에서 lotto.indexOf(num) == -1 일 경우 중복 값이 없는 것이므로 lotto.push(num); 한다.

 

 

 

5. 번호 오름차순 정렬

배열에 값들이 잘 들어갔지만 오름차순 정렬이 되지 않았다. sort() 메서드를 사용해 정렬하도록 한다.

var lotto = [];
        while(lotto.length < 6){
            var num = parseInt(Math.random() * 45 + 1);
            if(lotto.indexOf(num) == -1){
                lotto.push(num);
            }
        }
lotto.sort((a,b)=>a-b);

.sort() 는 사전순으로 정렬하기 때문에 오름차순정렬을 나타내는 수식인 (a,b)=>a-b를 사용했다. 내림차순정렬을 원할경우 (a,b)=>b-a를 사용하면 된다.

var lotto = [];
        while(lotto.length < 6){
            var num = parseInt(Math.random() * 45 + 1);
            if(lotto.indexOf(num) == -1){
                lotto.push(num);
            }
        }
lotto.sort((a,b)=>a-b);
document.write(lotto);

화면 출력 메서드 document.write();를 사용해 확인해 보면 오름차순 정렬이 된 1~45 사이의 난수 6개를 확인할 수 있다.