새소식

알고리즘 테스트 ⏲/JavaScript

[JavaScript] 숫자야구 풀이

  • -
숫자야구

4자리 정답 숫자를 찾는 문제. 입력값 4자리 수 중 숫자가 포함되어 있는 경우 볼, 자리까지 동일하면 스트라이크. 모두 맞추면 홈런.

개인 풀이

다이어그램

알고리즘

// 랜덤 정수 4자리 정답값 부여
const randomNumberInRange = (min, max) =>
  Math.floor(Math.random() * (max - min + 1)) + min;
let answer = "";
while (answer.length !== 4) {
  let random = String(randomNumberInRange(1, 9));
  if (answer.indexOf(random) == -1) {
    answer += random;
  }
}
// 정답값 표시 ( 실제 플레이 시 이 부분은 주석처리 )
const $answer = document.querySelector(".answer");
$answer.textContent = answer;

// 기회 부여
const $opertunity = document.querySelector(".opertunity");
let opertunity = parseInt($opertunity.textContent); // 10

// 숫자를 입력
let inputValue = "";
const $input = document.querySelector("input");
const handleInput = (e) => {
  inputValue = e.target.value;
};
$input.addEventListener("input", handleInput);

// 입력체크 함수
const inputCheck = (ipt) => {
  if (ipt.length !== 4 || !$input.value) {
    return false;
  }
  let iptCheck = "";
  for (let i = 0; i < ipt.length; i++) {
    if (ipt.indexOf(ipt[i]) == i) iptCheck += ipt[i];
  }
  if (ipt === iptCheck) return true;
  else return false;
};
// strike수, ball수, 진행상태
const $isProgress = document.querySelector(".isProgress");
const $strikeCount = document.querySelector(".strikeCount");
const $ballCount = document.querySelector(".ballCount");
// 버튼 시작
const $btn = document.querySelector("button");
const handleButtonClick = () => {
  let strike = 0;
  let ball = 0;
  if (!inputCheck(inputValue)) {
    alert("4자리를 입력하거나 중복되지 않는 4자리를 입력하세요");
    $input.value = "";
    return;
  }
  if (inputValue === answer) {
    $isProgress.textContent = "HOME RUN";
    return;
  }
  // 비교 시작
  for (let i = 0; i < 4; i++) {
    if (answer.indexOf(inputValue[i]) !== -1 && inputValue[i] == answer[i]) {
      strike += 1;
    } else if (answer.indexOf(inputValue[i]) !== -1) {
      ball += 1;
    }
  }
  $strikeCount.textContent = strike;
  $ballCount.textContent = ball;
  if (strike === 0 && ball === 0) $isProgress.textContent = "OUT";
  else $isProgress.textContent = "NOT OUT";
  $input.value = "";
  $input.focus();
  $opertunity.textContent = opertunity -= 1;

  if (opertunity < 0) {
    $opertunity.textContent = "기회 모두 소진";
    alert("기회 모두 소진");
    return;
  }
};
$btn.addEventListener("click", handleButtonClick);
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div>[정답] <span class="answer"></span></div>
    <div>입력값 >> <input type="text" /></div>
    <button class="btn">GO</button>
    <div>
      ball: <span class="ballCount"></span> <br />strike:
      <span class="strikeCount"></span>
    </div>
    <div>진행상태: <span class="isProgress"></span></div>
    <div>남은 기회: <span class="opertunity">9</span></div>
    <script src="index.js"></script>
  </body>
</html>
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.