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);
		}
	}
}