
// 1. 6개의 빈 리스트를 만든다.
const savedNumbers = [];
// 45개의 플래그 리스트 flase로 초기화 한다.
const flags = new Array(45).fill(false);
console.log(flags);
// 6개의 값을 모두 저장할 때까지 반복한다.
while (savedNumbers.length < 6) {
// randomValue라는 변수로 0부터 44사이의 랜덤값 생성 (0~44)
const randomValue = Math.floor(Math.random() * 45);
// 플래그 리스트에서 해당값의 인덱스를 확인.
if (!flags[randomValue]) {
// !는 논리 NOT연산자, iflags[randomValue]가 false인 경우 true로 평가.
// 즉, flags[randomValue]가 flase면,
savedNumbers.push(randomValue);
// randomValue를 savedNumbers 배열에 추가하고,
flags[randomValue] = true;
// flags[randomValue]를 true로 변환하여 다시 선택되지 않게함.
}
}
// 결과값 출력하기
console.log("저장된 6자리 번호:", savedNumbers);
console.log("플래그 리스트 상태:", flags);
! : 논리연산자 NOT
fill()함수 : start index부터 end index 전까지(end index는 미포함) value값으로 채워주는 함수. *지정값을 입력하지 않으면 start는 0, end는 배열의length.
Math : Math 객체는 수학에서 자주 사용하는 상수와 함수들을 미리 구현해 놓은 자바스크립트 표준 내장 객체.
Math.floor : 소수점 이하를 버림.
Math.random : 난수를 지정하는 함수. 범위를 구하려면 min <= number <= max
.
.
.
다른 방법을 사용 할 수 도 있음.
// 0부터 44까지의 숫자를 포함하는 배열 생성
const numbers = Array.from({ length: 45 }, (_, index) => index);
// Fisher-Yates 알고리즘 사용해서 배열 섞기 함수 만들기
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
// 요소 교환 (swap)
[array[i], array[j]] = [array[j], array[i]];
}
}
// 배열을 섞기
shuffle(numbers);
// 앞의 6개 요소 선택
const selectedNumbers = numbers.slice(0, 6);
// 결과 출력
console.log("선택된 번호들:", selectedNumbers);
for문으로 마지막 인덱스 i부터 첫번째 인덱스인 0까지 반복한다.
0부터 i까지 무작위 인덱스인 j는 'i+1'로 곱하고 'Math.floor'로 정수로 변환하여 '0'부터 'i'사이의 무작위 정수를 얻는다.
배열의 현재 인덱스 i 요소와 무작위 인덱스 j요소를 교환한다.(swap)
초기 배열: [1, 2, 3, 4, 5]
첫 번째 반복 (i = 4):
j는 0부터 4 사이의 무작위 값, 예를 들어 2 선택.
array[4]와 array[2]를 교환.
교환 후 배열: [1, 2, 5, 4, 3]
두 번째 반복 (i = 3):
j는 0부터 3 사이의 무작위 값, 예를 들어 1 선택.
array[3]와 array[1]를 교환.
교환 후 배열: [1, 4, 5, 2, 3]
세 번째 반복 (i = 2):
j는 0부터 2 사이의 무작위 값, 예를 들어 0 선택.
array[2]와 array[0]를 교환.
교환 후 배열: [5, 4, 1, 2, 3]
네 번째 반복 (i = 1):
j는 0부터 1 사이의 무작위 값, 예를 들어 1 선택.
array[1]와 array[1]를 교환 (자기 자신과 교환).
배열 상태 변화 없음: [5, 4, 1, 2, 3]
임의의 순서를 생성하거나, 카드 섞기, 랜덤 샘플링 등 다양한 상황에서 활용할 수 있다.
function juminCheck() {
let jumin = prompt("주민번호를 입력하세요");
let juminArray = jumin.split("").map(Number); // 문자열을 배열로 변환하고 숫자로 변환
// 주민번호 유효성 검사를 위한 체크섬 계산
const weights = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < 12; i++) {
sum += juminArray[i] * weights[i];
}
let remainder = sum % 11;
let checkDigit = (11 - remainder) % 10;
if (checkDigit === juminArray[12]) {
console.log("유효한 주민등록번호입니다.");
} else {
console.log("유효하지 않은 주민번호입니다.");
}
}
// 함수 호출
juminCheck();