0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

整数の並びを半角スペース区切りで入力 2 JavaScript編(paizaランク C 相当)

0
Last updated at Posted at 2026-08-22

paizaの「整数の並びを半角スペース区切りで入力 2 JavaScript編(paizaランク C 相当)」を解きました。

今回は、

  • 1行目:複数の整数
  • 2行目:整数1つ
  • 3行目:複数の整数

という入力形式でした。

前回の問題で使った、

.split(" ").map(Number)

を使い分ける練習になりました。


問題

整数 ABN と、N 個の整数が与えられます。

入力されたすべての値に +1 して、入力された順番に改行区切りで出力します。

入力例

3 5
4
-2 44 29 100

出力例

4
6
5
-1
45
30
101

解答コード

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 input1 = lines[0].split(" ").map(Number);
  const N = Number(lines[1]);
  const input3 = lines[2].split(" ").map(Number);

  console.log(input1[0] + 1);
  console.log(input1[1] + 1);
  console.log(N + 1);

  for (let i = 0; i < N; i++) {
    console.log(input3[i] + 1);
  }

});

lines の中身

入力が、

3 5
4
-2 44 29 100

だった場合、lines は次のようになります。

[
  "3 5",
  "4",
  "-2 44 29 100"
]

標準入力から受け取った値は、最初はすべて文字列です。


1行目を処理する

1行目は、

3 5

のように、複数の整数が半角スペースで区切られています。

そこで、

const input1 = lines[0].split(" ").map(Number);

とします。

まず、

.split(" ")

で半角スペースごとに分けると、

["3", "5"]

になります。

さらに、

.map(Number)

で、それぞれを数値に変換します。

[3, 5]

そのため、

input1[0]

3

input1[1]

5 になります。


2行目を処理する

2行目は、

4

のように整数が1つだけです。

そのため、

const N = Number(lines[1]);

とします。

複数の値ではないので、ここでは split() は必要ありません。


3行目を処理する

3行目は、

-2 44 29 100

のように、再び複数の整数が半角スペースで並んでいます。

そのため、

const input3 = lines[2].split(" ").map(Number);

とします。

結果は、

[-2, 44, 29, 100]

になります。


A、B、Nを+1して出力する

console.log(input1[0] + 1);
console.log(input1[1] + 1);
console.log(N + 1);

入力が、

3 5
4

なら、

4
6
5

と出力されます。


for 文で3行目を順番に処理する

3行目には N 個の整数が入っています。

for (let i = 0; i < N; i++) {
  console.log(input3[i] + 1);
}

N = 4 の場合は、

i = 0
i = 1
i = 2
i = 3

の4回繰り返します。

input3 が、

[-2, 44, 29, 100]

なら、

input3[0] + 1
input3[1] + 1
input3[2] + 1
input3[3] + 1

が順番に実行されます。

結果は、

-1
45
30
101

です。


今回のポイント

今回一番大事だったのは、1行に値が1つなのか、複数なのかで処理を変えることです。

値が1つだけの場合

const N = Number(lines[1]);

半角スペース区切りで複数ある場合

const input1 = lines[0].split(" ").map(Number);
const input3 = lines[2].split(" ").map(Number);

この違いを覚えておくと、paizaの標準入力問題がかなり読みやすくなりそうです。


今回つまずいたところ

最初は3行目を、

const input3 = Number(lines[2]);

としてしまいました。

しかし3行目は、

-2 44 29 100

のように複数の数字が入っています。

そのため、1つの数値に変換する Number() ではなく、

.split(" ").map(Number)

を使って配列にする必要がありました。

また、出力では N + 1 も必要でした。


まとめ

今回覚えたことは次の3つです。

Number(lines[i])

→ 1行に数値が1つだけの場合

lines[i].split(" ").map(Number)

→ 1行に複数の数値が半角スペース区切りで並んでいる場合

for (let i = 0; i < N; i++)

N 個のデータを順番に処理する場合

前回と似た問題でしたが、自分でもう一度書いて解けたことで、標準入力の扱い方が少しずつ定着してきました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?