AtCoderの【B - Kagami Mochi】の問題において、JavaScriptで以下の通り入力してACがでます。
javascript
1function main(input) { 2 var args = input.split("\n"); 3 4 var n = parseInt(args[0], 10); 5 6 var d = args 7 .slice(1, args.length - 1) 8 .sort((a, b) => a - b) 9 .map((n) => parseInt(n, 10)); 10 11 var sum = 1; 12 for (let i = 1; i < n; i++) { 13 if (d[i - 1] < d[i]) { 14 sum++; 15 } 16 } 17 console.log(sum); 18} 19 20main(require("fs").readFileSync("/dev/stdin", "utf8"));
このコードの中の、
.slice(1, args.length - 1)
がなぜlength-1になるのかわかりません。
テストで以下のように標準入力すると正解は「3」なのに「2」と表示されます。
4 10 8 8 6
テストでは不正解なのになぜか通すとACがでます。
私が根本的に何か勘違いしているのかもしれませんが、わかる方おられましたら教えていただけると助かります。
console.log(args);
console.log(args.slice(1, args.length - 1));
出力結果は以下のようになると思います。
[ '4', '10', '8', '8', '6' ]
[ '10', '8', '8' ]
4を消すのはわかりますが、なぜ6まで消して、さらにACになるのでしょうか?
.slice(1, args.length)ではなくて.slice(1, args.length - 1)が正解になる理由が知りたいです。
4\n
10\n
8\n
8\n
6\n
4\n
10\n
8\n
8\n
6
標準入力の最後に改行を入れてないからですね!
解決しました!
ありがとうございます!
回答1件
あなたの回答
tips
プレビュー