テストは通るのに提出で不合格になります
「テスト」と「提出」では、実行されるテストケースの数が違います。テストで使われるのはRecursion側がランダムに選んだ少数のテストケースだけで、提出ではその問題に用意されたテストケースをすべて実行します。テストで当たらなかった入力で落ちているのが、ほとんどの原因です。
まず確かめること
不合格になった画面には、どのテストケースで落ちたかが表示されます。その入力をカスタム入力に貼り付けて、手元で同じ結果になるか確かめてください。
落ちる入力には偏りがあります。次のような、端にあたる値で落ちていることが多くあります。
- 空の配列や空の文字列
- 0や負の数
- 要素が1つだけの配列
- 同じ値が複数ある配列
- 想定より大きな数
入出力例の矢印を押すとその入力がカスタム入力にコピーされます。そこから値を少しずつ変えていくと、書き間違えずに端の値を試せます。
よくある原因
戻り値を返していない
コンソールに出力しているだけで return を書いていない場合、テストではそれらしい表示になりますが、提出では不合格になります。判定に使われるのは関数の戻り値だけです。
データ型が合っていない
数値を返すべきところで文字列を返している場合などです。小数の扱いも問題になりやすく、切り捨てや四捨五入の指示があるときは問題文をもう一度確かめてください。
特定の入力で処理が抜けている
条件分岐のどれにも当てはまらない入力があると、その場合だけ何も返さないコードになります。if と else if だけで書いているときは、最後に else があるかを見てください。
計算量が足りていない
入力が小さいうちは通り、大きくなると時間切れになることがあります。この場合はタイムアウトの記事を参照してください。
提出の回数に制限はありません。落ちたテストケースを1つずつ潰していくのが、いちばん確実な直し方です。