このページについて

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

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

挑戦する課題

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

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

問題

西暦年y、月m、日付dが与えられるので、和暦の元号を表示してください。

和暦は、以下の条件を確認し、西暦から変換してください。

  • 明治は1912年7月29日まで
  • 大正は1912年7月30日から1926年12月24日まで
  • 昭和は1926年12月25日から1989年1月7日まで
  • 平成は1989年1月8日から2019年4月30日まで
  • 令和は2019年5月1日から

入力される値

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

期待する出力

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

  • Gは”明治”、”大正”、”昭和”、”平成”、”令和”のいずれかの元号です。
  • 今回の問題では、元号のみで和暦年は表示しません。

考え方

この問題は単純なようで、境界条件が存在するので気を付ける必要がある。

たとえば、「明治」の判定を次のようにしたとする。

この場合、

  • 「1912年6月27日」は「明治年6月27日」と正しく判定
  • 「1911年8月28日」は誤って判定(1911年は1912年以前だが、8月は7月以降なので、2番目の条件判定で却下される)
  • 「1910年7月30日」は誤って判定(1910年は1912年以前、7月は7月と等しいが、30日は29日より大きいため、3番目の条件で却下される)

となってしまう。

従って、まずは西暦年だけで判断し、次に境界と同じ西暦年で日付を判断する必要がある。

解答例