第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 を知らないわけではないんだろうけれど、上手く使えていなくて、コードが冗長になっているものを何度か見かけているので、頭に叩き込んでおこうと思いました。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません