(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]} `);
}
'PROGRAMMING > Node.js' 카테고리의 다른 글
[node.js/mac] module update, 모듈 업데이트 (0) | 2021.07.29 |
---|---|
[node.js] weather 모듈 (0) | 2021.04.07 |
[node.js] http 서버 (0) | 2021.04.07 |
[node.js] http 모듈로 웹 서버 만들기 (0) | 2021.04.07 |
[node.js] 노드제이에스 블로그 프로젝트 참고사항 (0) | 2021.04.07 |