PROGRAMMING/node.js

[node.js] 로또 추첨 구현하기

seulda 2021. 4. 8. 01:10
728x90

(feat. 인생역전에게로 한걸음,,)

 

실행하면 1 ~ 45의 숫자 중 랜덤하게 6개를 뽑아주는, 인생 역전에게로 한걸음 다가갈 수 있는 '로또 번호 추첨 코드'를 작성해봅시다.

 

 

기초 지식도 없는 내가 생각한 방법은
지정해놓은 범위 안에서 랜덤으로 숫자를 뽑는 함수를 만들고 -> 중복되는 결과가 없게 출력을 6번 반복
인데, 말이야 쉽지 중복을 어떻게 없애야할까 머리가 아픕니다.

 

열심히 검색해보면 쉽게 접할 수 있는 랜덤함수는 아래의 종류가 나옵니다.

 

Math.random : 0~1 사이의 실수 반환
Math.floor : 소수점 버림 = 내림
Math.ceil : 소수점 버리고 정수부분 1 올림 = 올림
Math.round : 소수점 첫째자리 0~4는 내리고 5~9는 올림 = 반올림

 

Math.random 함수를 써서 실수를 받은 다음에, 10이나 100 등 원하는 범위만큼 곱해 자릿수를 올려준 다음, floor 또는 ceil 함수를 사용해 정수부분만 획득해서 사용하는 방법을 대중적(?)으로 사용한다고 합니다.

 

Math.floor(Math.random() * 45) + 1;

 

이렇게해서 1부터 45까지의 랜덤한 숫자를 획득할 수 있는 실행코드 한 줄을 획득하였습니다.

 

그러면 그 다음 산으로 넘어가봅시다.


중복 값을 어떻게 없애야 할까.. 랜덤인데 어떻게 해야할까 고민하다가 나름의 방법이 생각났습니다.


for문을 만들어서 랜덤 숫자를 만들고, if문 안에 for문을 넣어 같은 값이 있는지 확인하고 숫자를 저장하는 방법입니다.


오 매우 비효율적으로 보이지만, 그 것은 사실이며 내 실력이 이만큼밖에 되지 않음에 한탄하며 더 공부하기를 다짐합니다.

 

//중복검사함수 : 중복이 있으면 1, 없으면 0 반환
const jb = a => {
    let ts = 0;
    for (let i = 0; i < 6; i++) {
        if (a == arr[i]) {
            ts = 1;
        }
    }
    return ts;
}
//랜덤 숫자 생성 코드
for (i = 0; i < y; i++) {
    x = Math.floor(Math.random() * 45) + 1;
    if (jb(x) == 0) {
        arr[i - (6 - y)] = x;
    } else {
        y++;
    }
}

 

복잡하고 삥 돌아온 코드지만 나름 짱구를 굴려가며 만들었기에 뿌듯하게 코드를 실행해봅니다.

 

로또 추첨 코드 실행 결과~!

3~4번의 실행에 한번 꼴로 undefined가 나옵니다. 나름 성공입니다.^^


글을 작성하고 있는 지금은 목요일에서 금요일로 넘어가는 밤입니다. 다행히 로또를 사면 오래 기다리지 않아 결과를 알 수 있겠습니다.


undefined의 이유와 코드의 간소화는 로또 구매 결과 이후에 작성할지 말지 생각해보겠습니다. @^^@

 

 

 


아래는 로또 추첨 코드 전문입니다.

// lotto.js

var arr = [, , , , ,]; // 로또 값이 저장될 배열
let i, x, y = 6;

//중복검사함수 : 중복이 있으면 1, 없으면 0 반환
const jb = a => {
    let ts = 0;
    for (let i = 0; i < 6; i++) {
        if (a == arr[i]) {
            ts = 1;
        }
    }
    return ts;
}

//랜덤 숫자 생성 코드
for (i = 0; i < y; i++) {
    x = Math.floor(Math.random() * 45) + 1;
    if (jb(x) == 0) {
        arr[i - (6 - y)] = x;
    } else {
        y++;
    }
}

//중복값 제거된 수 출력
for (let i = 0; i < 6; i++) {
    console.log(`${arr[i]}  `);
}

 

 

728x90