このページについて

このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。

見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。

挑戦する課題

レベルアップ問題集日付セットから「次の日 (paizaランク C 相当)」を取り上げます。

以下は、問題公開 Web ページからの引用です。

問題

西暦y年m月d日の次の日を表示してください。

ただし、各月の日数は以下のように決まることに注意してください。

  • 4, 6, 9, 11月は30日
  • 2月は閏年ならば29日、そうでなければ28日
  • それ以外の月は31日

ただし、閏年は次のような年のことをいいます。

  • 西暦が4で割り切れる年は閏年
  • ただし、100で割り切れる年は平年
  • ただし、400で割り切れる年は閏年

入力される値

整数yとmとdが次のように、スペース区切りで1行で入力されます。

期待する出力

以下のような形式で、答えを出力してください。

考え方

与えられた日の次の日を出力すれば良いのでさほど難しくはないが、考慮しなければならないのは次の2点。

  • 閏年の判定を行い、2月末日の処理を確実にする。
  • 大晦日(12月31日)であれば、年も一つ加算する。

閏年の判定については、下記の記事を参考にしてください。

閏年の判定 (paizaランク D 相当)

2月以外で月末が30日までしかない日の判定には、辞書型( Dictionary)を使っています。辞書にあらかじめ 4, 6, 9, 11 をキーとしたデータを与えておき、それを用いて30日判定を行なってみました。

つまり、 m を月数とするとき、

このようにコードを記述すれば、月末が30日までの処理を簡単に判断することが可能です。

解答例

もうちょっと簡素化できるかもしれません。