このページについて

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

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

挑戦する課題

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

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

問題

西暦y年m月の月の日数を計算して表示してください。

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

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

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

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

入力される値

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

期待する出力

答えの数値を1行で出力してください。

考え方

月の日数を求めることはそれほど難しくないが、閏年の計算をおこなわなければいけない点に注意。

これは、過去問で閏年の計算を行っているため、それを流用する。

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

閏年の計算がよく使われるのであれば、Code snipets としいて登録しておくのも一つの方法。
今回は関数にすることで、コードの見通しをよくした。

2月、4月、6月、11月の判定には条件式を並べてもいいが、ここでは辞書型を使い判断することにした。辞書のキーを月数とし、登録されている、つまり辞書の検索結果が nil でなければ 30 を出力するようにしている。

解答例