Paizaの「指定幅での出力」問題に挑戦したら、padStart()
でエラー発生。まさかの 「数値には使えません」 で撃沈…。でも、解決策はシンプルだった!
📌 問題: 数値を M
桁の幅で出力する
与えられた N
を M
桁 になるようにスペースを埋めて出力する。
入力例
42 5
出力例
42
(”42” の前に3つの半角スペース)
💥 NGコード: 数値のまま padStart()
を使ってエラー
最初、シンプルに書いてみたけど、エラーになった…。
const [N, M] = input.split(" ").map(Number);
console.log(N.padStart(M, ' '));
// ❌ TypeError: N.padStart is not a function
😱 なぜエラー?
→ padStart()
は 文字列専用! map(Number)
で N
を数値に変換してしまったせい。
✅ OKコード: 文字列のまま padStart()
を使う!
数値変換せず、N
を 文字列のまま 使えば解決。
const rl = require('readline').createInterface({input: process.stdin});
rl.on('line', (input) => {
const [N, M] = input.split(" "); // Nは文字列のまま
console.log(N.padStart(Number(M), ' ')); // ✅ スペース埋めOK
rl.close();
});
🔍 修正ポイント
- .map(Number)
を 削除 → N
を 文字列のまま 扱う
-
padStart(Number(M), ' ')
でM
桁 までスペース埋め
💡 メモ
✅ padStart()
は 文字列専用!
✅ .map(Number)
は便利だけど、型変換に要注意
✅ 文字列として扱う場面なら、余計な変換は不要
🎯 まとめ: 型の意識、大事!
✔ padStart()
を使うなら、文字列かどうか確認!
✔ map(Number)
を使うと、意図せず型が変わることがある
✔ JavaScript
の型変換は 無意識にやるとハマる
こういう 一見簡単な問題 ほど、意外と落とし穴があるんだよね…。