第87回【JavaScript】集合の探索、重複の削除

現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 87 回目です。

予定が決まりそうになった瞬間、別のところから待ったがかかる。業務が入ったからずらして欲しい、とのこと。リスケは心が痛みます。業務優先なので仕方ないですが、それでも、これを全員に伝え、またゼロから予定をあわせる作業はしんどいです。

それでは、今日も頑張ってみようと思います。

集合の探索 (paizaランク C 相当)

N 個の要素からなる数列 A と、整数 B が与えられます。B が A に含まれているかどうかを判定してください。


入力される値

N B
A_1 A_2 ... A_N

入力値最終行の末尾に改行が1つ入ります。


期待する出力

B が A に含まれているなら「Yes」を、含まれていないなら「No」を出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ N ≦ 100
・ 1 ≦ B ≦ 100
・ 1 ≦ A_i ≦ 100 (1 ≦ i ≦ N)
・ i ≠ j ならば A_i ≠ A_j


入力例

5 4
1 2 3 4 5

出力例

Yes

JavaScript でも Set を使ってみる。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [N,B] = lines[0].split(/\s/).map(Number);
  const A = new Set(lines[1].split(/\s/).map(Number));
  if (A.has(B)) {
      console.log('Yes');
  } else {
      console.log('No');
  }
});
Python
N,B = map(int,input().split())
A = { int(x) for x in range(N) }
if B in A:
    print('Yes')
else:
    print('No')

重複の削除 (paizaランク C 相当)

N 個の要素からなる数列 A が与えられます。数列 A は昇順にソートされています。A の重複した要素を取り除いて昇順に出力してください。


入力される値

N
A_1 A_2 ... A_N

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A の重複した要素を取り除き、半角スペース区切りで昇順に1行で出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ N ≦ 100
・ 1 ≦ A_i ≦ 100 (1 ≦ i ≦ N)
・ i < j ならば A_i ≦ A_j


入力例

6
1 2 3 3 4 5

出力例

1 2 3 4 5

重複削除は Set が一番美しく書けると思う。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const N = Number(lines[0]);
  const A = new Set(lines[1].split(/\s/).map(Number));
  console.log(...A);
});
Python
N = int(input())
A = { int(x) for x in input().split() }
print(' '.join(map(str,A)))

最後に

思った以上にシンプルに書けたので満足。まぁ、そういう問題ではないか。Set も結構よく使うのでお手の物。連想配列や Set はコードを分かりやすくするポイントになる気がしている。

Set を知らないわけではないんだろうけれど、上手く使えていなくて、コードが冗長になっているものを何度か見かけているので、頭に叩き込んでおこうと思いました。

引き続き、よろしくお願いいたします!

Python の第87回はこちら