자바스크립트를 사용해
0~9까지 서로 다른 숫자 3개를 무작위로 뽑아
컴퓨터가 뽑은 숫자를 맞추는 프로그램을 만들어보자
컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려준다.
숫자의 값과 위치가 모두 일치하면 S
숫자의 값은 일치하지만 위치가 틀렸으면 B
아래와 같이 만들면 성공!
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 134
0B0S
2번째 시도 : 238
1B1S
3번째 시도 : 820
2B1S
4번째 시도 : 028
3B
5번째 시도 : 280
3S
4번만에 맞히셨습니다.
게임을 종료합니다.
우선 0~9까지 서로 다른 임의의 숫자 3개를 뽑는 코드를 작성해보자.
Math.random() 함수는 0보다 크고 1보다 작은 랜덤 숫자를
부동 소수점으로 반환하는 함수다
-> 0보다 크고 1보다 작은 임의의 실수 반환
let ramdomNumber = Math.random()
console.log(ramdomNumber) // 0.12241757863898894
console.log(ramdomNumber) // 0.12644688129350934
소수저 이하 값 처리하는 메서드
Math.floor() : 소수점 이하 값을 버림
Math.ceil() : 소수점 이하 값을 올림
Math.round() : 소수점 이하 값을 반올림
Math.random() 으로 생성되는 숫자*10
Math.floor()를 사용하면 0~9까지 임의의 수를
생성할 수 있다
Math.floor(Math.random()*10)
console.log(Math.floor(Math.random()*10)) // 7
console.log(Math.floor(Math.random()*10)) // 1
console.log(Math.floor(Math.random()*10)) // 0
이 숫자를 배열에 하나씩 추가하여 입력한 값과 비교하면 된다.
그 전에 Math.floor(Math.random()*10)으로 생성한 임의의 수는
값이 중복될 수 있다. 배열에 추가하기 전에 중복값을 제외하는
방법을 알아보자
// while 문을 활용한 방법
function generateNumber1() {
let num = [];
let i = 0;
while (i < 3) {
let n = Math.floor(Math.random() * 10);
if (!sameNum(n)) {
num.push(n);
i++;
}
}
function sameNum(n) {
for (let i = 0; i < num.length; i++) {
if (n === num[i]) return true;
}
return false;
}
return num;
}
// n에 0~9 사이 임의의 숫자가 담기고 sameNum() 함수를 통해
// 배열에 중복된 수가 있는지 확인한다. 중복된 수가 있으면 true를 반환하고
// 다시 while문이 반복돼 새로운 숫자를 생성 중복된 수가 없을 때까지
// while문이 실행되고 num 배열을 반환한다.
// includes 메서드를 활용한 방법
function generateNumber() {
let num = [];
while (num.length < 3) {
let n = Math.floor(Math.random() * 10);
if (!num.includes(n)) {
num.push(n);
}
}
}
// includes 메서드는 배열이 n을 포함하고 있는지 확인
// 포함하면 true 아니면 false를 반환한다. false를 반환할 경우
// 배열에 포함하면 중복되지 않는 길이가 3인 배열 완성