본문 바로가기
학원에서 배운 것/JavaScript

자바스크립트 맛보기

by 쿠리의일상 2023. 2. 2.

 

강사님이 어제 수업 중 내주신 문제를 누군가 자바스크립트로 구현했다고 한다.

ㅇㅁㅇ.. 해볼 생각도 못했는데 신기했다 !!

코드 공유를 해주셔서 공부 겸 끄적여본다.

 

const readline = require("readline");
const FAKE = 9;
const REAL = 10;
let sum = 0;

function quiz(num) {
  const sack = [];
  // 입력받은 자루의 수인 num 에 따라 가짜 금화가 든 자루를 설정하는 랜덤 수
  const rand = Math.floor(Math.random() * num) + 1;

  // 랜덤 수에 따라 진짜와 가짜 금화 자루 생성
  for (let i = 0; i < num; i++) {
    i + 1 === rand ? sack.push(FAKE) : sack.push(REAL);
  }

  // 생성된 배열에 map 을 사용하여 금화 무게 합산 처리
  sack.map((el, index) => {
    el === FAKE ? (sum += (index + 1) * FAKE) : (sum += (index + 1) * REAL);
  });

  // 1 ~ n 까지의 숫자의 합을 구하는 공식을 사용하여 금화가 전부 진짜일 때의 총 무게 값 계산
  const trueSum = ((num * (num + 1)) / 2) * 10;

  // trueSum 과 계산한 sum 의 차이를 통해 가짜 금화가 든 자루 출력
  console.log(`${trueSum - sum} 번째 자루에 가짜 금화가 들었습니다!`);
}

console.log("자루는 몇개 존재 하나요?");
// 입력을 받기 위한 코드
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
rl.on("line", function (input) {
  // 입력은 문자로 받아지기 때문에 숫자로 변경하여 quiz 함수에 전달
  const inputNum = Number(input);
  quiz(inputNum);
  rl.close();
}).on("close", function () {
  process.exit();
});

 

숫자 합을 구하는 공식을 정말 오랜만에 봤다.. 그리고 이런 방식으로 풀 수 있구나 신기했다.