今回は paiza の「「ある数でつくられた数列」を解くために:part3」の問題に挑戦!
# 問題概要
- 3つの整数
A_1, A_2, A_3が与えられる - 次に整数
Nが与えられ、その後 N 個の整数b_iが1行ずつ与えられる - 各
b_iに対して-
b_i×A_1 -
b_i×A_2 -
b_i×A_3
を計算する
-
- それら すべての積の中で、異なる値(重複を除いた値)の個数 を求める
- 求めるのは 値の一覧ではなく「種類数(個数)」
入力形式
- 1行目:
A_1 A_2 A_3 - 2行目:
N - 3行目以降:
b_1, b_2, ..., b_N(各1行)
出力形式
- 掛け算で生成される整数の 種類数 を1行で出力
入力例:
1 2 3
5
1
2
3
4
5
出力例:
11
✅OK例:
const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];
rl.on('line', line => lines.push(line));
rl.on('close', () => {
const A = lines[0].split(' ').map(Number);
const N = Number(lines[1])
const b = lines.slice(2).map(Number);
const list = new Set();
for (let i = 0; i < N; i++) {
for (let j = 0; j < 3; j++) {
list.add(A[j] * b[i]);
}
}
console.log(list.size);
});
🔍コードの流れ
- 標準入力を用いて入力を受け取り、受け取った値を変数に代入。
- 掛け合わせてできる整数を数えるために
list(=集合=Set) を準備。 -
N回のループの中で変数を受け取り、A_1, A_2, A_3との積をlistに追加。 - 最後に集合のサイズを出力。
📝まとめ
- 「重複を除いた個数」を求める問題
- JavaScript では
Setが適している -
Setの特徴- 同じ値は1つとして保持される(重複除去)
-
.add()で追加 -
.sizeで要素数取得