AOJ0083 Era Name Transformation
問題リンク Era Name Transformation
- 解法
年月日を表すクラスEを作り、比較メソッドcompareToを作りました。
pre-meiji, meiji, taisho, showaについて、各年号の最終日をクラスEの配列eとしてで作っておきます。
入力された年月日fをpre-meijiから順に比べていって一番最初にf<=e[k]となったkが合致する年号、f<=e[k]をどれも満たさないならheiseiとなります。
今思えばComparableをimplementsする必要は全くなかった。
- ソース
import java.util.Scanner; //Era Name Transformation public class AOJ0083 { static class E implements Comparable<E>{ public int y,m,d; public E(int y, int m, int d) { this.y = y; this.m = m; this.d = d; } public int compareTo(E o) { return y!=o.y?y-o.y:m!=o.m?m-o.m:d-o.d; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); E[] e = {new E(1868,9,7), new E(1912,7,29), new E(1926,12,24), new E(1989,1,7)}; int[] t = {0,1867,1911,1925,1988}; String[] n = {"pre-meiji","meiji","taisho","showa","heisei"}; while(sc.hasNext()){ E f = new E(sc.nextInt(),sc.nextInt(),sc.nextInt()); int k=0; while(k<4&&f.compareTo(e[k])>0)k++; if(k==0)System.out.println(n[k]); else System.out.println(n[k]+" "+(f.y-t[k])+" "+f.m+" "+f.d); } } }