강사님이 어제 수업 중 내주신 문제를 누군가 자바스크립트로 구현했다고 한다.
ㅇㅁㅇ.. 해볼 생각도 못했는데 신기했다 !!
코드 공유를 해주셔서 공부 겸 끄적여본다.
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();
});
숫자 합을 구하는 공식을 정말 오랜만에 봤다.. 그리고 이런 방식으로 풀 수 있구나 신기했다.
'학원에서 배운 것 > JavaScript' 카테고리의 다른 글
KDT 5th 웹개발자 입문 수업 14일차 (0) | 2023.02.14 |
---|---|
KDT 5th 웹개발자 입문 수업 13일차 (0) | 2023.02.13 |
KDT 5th 웹개발자 입문 수업 12일차 (0) | 2023.02.10 |
KDT 5th 웹개발자 입문 수업 중 js 문제 (0) | 2023.02.09 |
KDT 웹개발자 입문 수업 11일차 - 2 (0) | 2023.02.09 |