[Javascript] 나도 로또 1등이 되어보자!(feat. 신박한 로또 1등 되는 방법)

김범기·2024년 7월 18일
0
post-thumbnail

개요

최근 로또 당첨자가 63명이 나왔다고 해서 보다가 유튜브의 알고리즘께서 나를 이 영상으로 인도했다.
신박한 로또 1등 되는 방법

그래서 한 번 시도를 해보기로 했다.

실행

  1. 로또를 자동 5천원치 뽑는다.
  2. 그 번호를 모두 뺀다.(왜냐면 나는 1등이 안되니까)
  3. 나머지 번호를 6개 조합함
  4. 여기서부터가 가장 중요함.
  5. 여기서 6개 번호 조합한 걸 또 뺀다.(왜냐면 나는 1등이 안되니까)
  6. 나머지 번호가 나온다.
  7. 이제 나도 1등!

일단 로또는 1~45에서 6개의 숫자를 뽑아서 6개의 숫자가 당첨 번호랑 모두 일치하면 1등이지.

그래서 우선 1~45를 무작위 뽑는 것을 JS로 구현해보자.

Math.floor(Math.random() * (max - min + 1)) + min

이것을

Math.floor(Math.random() (45 -1 + 1)) + 1
또는
Math.floor(Math.random()
45) + 1

이렇게 해주면 된다. 난 그냥 보기 싫어도 -1 +1을 붙여서 작성해야지.

변수 만들기

그리고 변수를 만들어주자.

let totalExcludeNumbers = new Set() // 내가 뽑은 모든 번호들
    let excludeNumbers = new Set()  // 이번에 내가 뽑은 번호들
    

주석에 적혀있듯, totalExcludeNumbers는 내가 뽑은 모든 번호들, 그리고 excludeNumbers는 이번에 자동으로 뽑은 번호들 이다.

로또 번호 뽑기

함수를 먼저 만들자.

function 로또번호뽑기(isWin = false){
  let i = 0
  const thisNumbers = []
  while (i < 6) {
    // 1~45
    let number = Math.floor(Math.random() * (45 -1 + 1)) + 1
    if (!thisNumbers.includes(number) && !totalExcludeNumbers.has(number)) {
      thisNumbers.push(number)
      excludeNumbers.add(number)
      i += 1
    }
  }
  if(isWin){
    console.log(`드디어 내가 될 로또 ${thisNumbers.sort((a,b) => {return a-b})}`)
  }else{
    console.log(`내가 안 될 로또 ${thisNumbers.sort((a,b) => {return a-b})}`)
  }
}

isWin으로 맨 마지막 나의 당첨번호를 알 수 있게 하자.

변수 i는 while문을 돌리기 위함.
thisNumbers는 1,000원 어치 로또 한 줄에 담긴 숫자 6개를 담을 array 변수.

이제 while문을 돌면서 랜덤한 숫자를 뽑는데, 이때 이미 같은 줄에 있는 숫자이거나, 내가 이미 뽑은 숫자에 있다면 다시 숫자를 뽑도록 했다.

!totalExcludeNumbers.has(number)

그런데 아직 처음 5,000원치를 뽑을 때는 이곳은 빈 곳이기 때문에 정말로 무작위한 숫자가 나온다.

그리고 제대로된 숫자가 뽑히면, excludeNumbers에 넣어두고, thisNumber에도 넣자.

이런 방식으로 로또 번호를 뽑아보자.

참고로 isWin 매개변수를 생성해서, 이것으로 내가 당첨될 번호인지 아닌 번호인지를 사용자가 볼 수 있게 출력한다.

이제 함수도 만들었으니 나도 로또 1등이 될 수 있게 해보자.

순서대로 진행

1. 로또를 자동 5천원치 뽑는다.

이 부분은

//  5번 하기. 로또 5,000원치 삼.
for (let i = 0; i < 5; i++) {
  로또번호뽑기()
}

이렇게 구현을 했다.

2. 그 번호를 모두 뺀다.(왜냐면 나는 1등이 안되니까)

// 그 번호를 모두 빼자.
totalExcludeNumbers = new Set([...excludeNumbers])
excludeNumbers = new Set()

로또 번호를 다시 뽑을 때 번호를 제외할 수 있도록 totalExcludeNumbers로 excludeNumbers에 담긴 숫자들을 옮겼다.

3. 나머지 번호를 6개 조합함

// 5,000원치 산 로또에 있는 번호 말고! 새로 조합해서 로또 다시 줘보소. 1,000원치 구매
로또번호뽑기()

다시 1,000원치 로또를 구매했다.

4. 여기서부터가 가장 중요함.

!!! 중요하다!!!

5. 여기서 6개 번호 조합한 걸 또 뺀다.(왜냐면 나는 1등이 안되니까)

//  또 나온 번호를 모두 빼자.
totalExcludeNumbers = new Set([...totalExcludeNumbers, ...excludeNumbers])
excludeNumbers = new Set()

또 이전에 나온 숫자를 빼주자.
이미 있던 totalExcludeNumbers에 새로 생긴 excludeNumbers를 추가해주면 된다.

6. 나머지 번호가 나온다.

45개의 숫자 중 최대 36개의 숫자를 뺐으니, 최소 9개의 숫자가 남는다.

그 숫자를 이용해서 또 로또 번호를 뽑아보자.

// 이제 나머지 번호로 조합임.
let 몇줄구매 = 5 
for (let i = 0; i < 몇줄구매; i++) {
  로또번호뽑기(true)
}

구매하고 싶은 만큼 구매해보자.

7. 이제 나도 1등!


이제 생성되는 번호를 들고 가서 로또 판매점에서 적어서 용지를 뽑고 토요일 20:30을 기다려보자.

이제 나도 로또 1등!

야호🐣

전체코드는 아래와 같다.

let totalExcludeNumbers = new Set() // 내가 뽑은 모든 번호들
let excludeNumbers = new Set()  // 이번에 내가 뽑은 번호들


function 로또번호뽑기(isWin = false){
  let i = 0
  const thisNumbers = []
  while (i < 6) {
    // 1~45
    let number = Math.floor(Math.random() * (45 -1 + 1)) + 1
    if (!thisNumbers.includes(number) && !totalExcludeNumbers.has(number)) {
      thisNumbers.push(number)
      excludeNumbers.add(number)
      i += 1
    }
  }
  if(isWin){
    console.log(`드디어 내가 될 로또 ${thisNumbers.sort((a,b) => {return a-b})}`)
  }else{
    console.log(`내가 안 될 로또 ${thisNumbers.sort((a,b) => {return a-b})}`)
  }
}

//  5번 하기. 로또 5,000원치 삼.
for (let i = 0; i < 5; i++) {
  로또번호뽑기()
}
// 그 번호를 모두 빼자.
totalExcludeNumbers = new Set([...excludeNumbers])
excludeNumbers = new Set()

// 5,000원치 산 로또에 있는 번호 말고! 새로 조합해서 로또 다시 줘보소. 1,000원치 구매
로또번호뽑기()
//  또 나온 번호를 모두 빼자.
totalExcludeNumbers = new Set([...totalExcludeNumbers, ...excludeNumbers])
excludeNumbers = new Set()

// 이제 나머지 번호로 조합임.
let 몇줄구매 = 5 
for (let i = 0; i < 몇줄구매; i++) {
  로또번호뽑기(true)
}

로또 특: 나만 당첨 안 됨.

결과


에라이ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

로또 추첨기 결론 : 안될놈은안된다. 로또 살 바에 저축이나 투자를 하자.

profile
반드시 결승점을 통과하는 개발자

0개의 댓글