0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 二分探索メニュー応用編 JavaScript 集団検査

Posted at

集団検査 (paizaランク C 相当)

解答例

N通りの候補を2で割っていき、最終的に1通りになればよいです。
偶数を2で割る場合はそのままでよいですが、奇数を2で割る場合、1余りますので、商を切り上げます。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

let N = Number(lines[0]);
let count = 0; //薬品の使用回数

while (N > 1) { //最終的に1通りになればよい
  count += 1;
  N = Math.round(N / 2); //奇数の場合切り上げる
}

console.log(count); //使用回数を出力

解答例(模範解答参考)

薬の使用回数をans、得られる情報の人数の最大値をnum(=2^ans)とします。
numがN人の住民の数を超えればよいです。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

let n = Number(lines[0]); //n人の住民
let [num, ans] = [1, 0];

while (num < n) { //得られる情報が、n人の住民を超えればよい
  num *= 2; //得られる情報は*2得られる
  ans++;//薬品を1回使う
}

console.log(ans); //使用回数を出力
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0