第96回【JavaScript】3の倍数のカウント、フラグ管理
現在取り組んでいるのは、paiza ラーニング問題集「Cランクレベルアップメニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 96 回目です。
LeoSaki(旦那)は、やるべき作業は出来る限り前倒しで行う主義です。ちょっとしたメール返信であっても、メンバーの勤怠管理であっても、重みは変わりません。もちろん、やるべきことが多く重なったときは重み付けをしますが。
それでは、今日も頑張ってみようと思います。
3の倍数のカウント (paizaランク D 相当)
正整数 n と、 n 個の整数 a_1, …, a_n が半角スペース区切りで与えられます。
与えられた整数の中に 3 の倍数がいくつあるかを数え、出力してください。
入力される値
n
a_1 a_2 ... a_n
1 行目に正整数 n が、 2 行目に n 個の整数 a_1, …, a_n が半角スペース区切りで与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
与えられた整数の中に3の倍数がいくつあるかを出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・n および各 a_i (1 ≤ i ≤ n) は 1 以上 50 以下の整数
入力例
2
4 3
出力例
1
3 でナベアツを思い浮かべる人がどのくらいいるのだろうか。
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 = lines[1].split(/\s/).map(Number);
let cnt = 0;
for (let i = 0; i < n; i++) {
if (a[i] % 3 == 0) cnt++;
}
console.log(cnt);
});
Python
N = int(input())
A = [int(x) for x in input().split()]
cnt = 0
for a in A:
if a % 3 == 0:
cnt += 1
print(cnt)
フラグ管理 (paizaランク D 相当)
正整数 n と n 個の整数 a_1, …, a_n が改行区切りで与えられるので、各 a_i (1 ≤ i ≤ n) が 7 であるか判定し、 a_1, …, a_n の中に 7 がひとつでも含まれていた場合には “YES" を、そうでない場合(7 がひとつも含まれていなかった場合)には “NO" を出力してください。
入力される値
n
a_1
...
a_n
1 行目には正整数 n が与えられ、 2 行目から (n + 1) 行目には n 個の整数 a_1, …, a_n が改行区切りで与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
a_1, …, a_n の中に 7 がひとつでも含まれていた場合には “YES" を、そうでない場合には “NO" を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ n および各 a_i (1 ≤ i ≤ n)は 1 以上 50 以下の整数
入力例
2
7
1
出力例
YES
フラグ管理で解きなさい、ということだろうか。
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]);
let flg = false;
for (let i = 1; i <= n; i++) {
const a = Number(lines[i]);
if (a == 7) {
flg = true;
}
}
if (flg) {
console.log('YES');
} else {
console.log('NO');
}
});
JavaScript(return を使う)
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]);
for (let i = 1; i <= n; i++) {
const a = Number(lines[i]);
if (a == 7) {
return console.log('YES');
}
}
console.log('NO');
});
Python
N = int(input())
for _ in range(N):
a = int(input())
if a == 7:
print('YES')
break
else:
print('NO')
最後に
return を使った書き方の方が、なんとなく JavaScript っぽい気がします。もちろん、break を利用して抜ける方法も知っておく必要があると思います。
フラグ管理の書き方であれば、ちゃんと break 分で抜けておけば、7 と等しいかどうかを調べる回数が減って、少しだけ早くなるかもしれません。数列が最大値の 50 あって、先頭に 7 がある場合、無駄に 49 回 7 と等しいかどうかを調べるわけですし。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません