숫자 야구 프로그램 만들기(1)

김종화·2023년 8월 14일

JavaScript

목록 보기
16/18

자바스크립트를 사용해
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인 배열 완성

0개의 댓글