1
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?

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

1
Posted at

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

今回のポイントは、

  • 標準入力から受け取った値は文字列
  • 半角スペース区切りの文字列を配列にする
  • 配列の各値を数値に変換する
  • for 文で1つずつ +1 して出力する

というところです。


問題

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

それぞれの値に +1 して、改行区切りで出力します。

入力例

3
12 4 -2

出力例

4
13
5
-1

今回は、出力例を見ると N にも +1 しています。


解答コード

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 input = lines[1].split(" ").map(Number);

  console.log(N + 1);

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

入力された値を確認する

入力が、

3
12 4 -2

の場合、lines の中身は次のようになります。

[
  "3",
  "12 4 -2"
]

ここで注意したいのは、入力された値は最初は文字列として扱われることです。


N を数値に変換する

const N = Number(lines[0]);

lines[0] は、

"3"

という文字列です。

そのため、Number() を使って、

3

という数値に変換します。

もし数値に変換せず、

const N = lines[0];

console.log(N + 1);

とすると、

31

と出力されてしまいます。

JavaScriptでは、

"3" + 1

は数値の足し算ではなく、文字列の連結として扱われるためです。


半角スペースで分割する

2行目は、

12 4 -2

という1つの文字列になっています。

そこで、

const input = lines[1].split(" ");

とすると、半角スペースごとに分割できます。

["12", "4", "-2"]

ただし、まだそれぞれは文字列です。


.map(Number) で数値に変換する

そこで、

const input = lines[1].split(" ").map(Number);

とします。

すると、

[12, 4, -2]

という数値の配列になります。

つまり、

.split(" ")

で文字列を分割して、

.map(Number)

で配列の中身をすべて数値に変換しています。


for 文で1つずつ+1する

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

input は、

[12, 4, -2]

なので、順番に処理されます。

1回目

input[0] + 1
12 + 1 = 13

2回目

input[1] + 1
4 + 1 = 5

3回目

input[2] + 1
-2 + 1 = -1

console.log() は呼ばれるたびに改行されるため、

13
5
-1

と出力されます。


処理の流れ

今回のコードでは、次の順番で処理しています。

標準入力
↓
linesに1行ずつ保存
↓
lines[0]をNumber()で数値に変換
↓
lines[1]をsplit(" ")で分割
↓
map(Number)で数値の配列に変換
↓
for文で1つずつ取り出す
↓
+1してconsole.log()で出力

今回覚えたこと

標準入力は文字列として受け取る

const N = Number(lines[0]);

計算したい場合は、数値への変換が必要です。

半角スペース区切りの入力はsplit(" ")

lines[1].split(" ");

配列の中身をまとめて数値に変換する

.map(Number)

配列を順番に処理する

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

今回特に大事なのは、標準入力で受け取った値は文字列なので、そのまま計算しないことです。

Number().map(Number) は、今後のpaizaの標準入力問題でもよく使いそうです。

1
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
1
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?