Problem:
西暦和暦変換

西暦で表された年月日を、元号を用いた和暦に変換し、その年月日を出力するプログラムを作成してください。入力は例に示すように 3 つの整数であり、順に西暦年、月、日です。これを、出力例に示すように変換してください。なお、明治以前の年月日が入力された場合は「pre-meiji」と表示してください。

各年号の最初の年は「元年」ではなく「１年」と出力することとします。

元号

期間

meiji

1868. 9. 8 〜 1912. 7.29

taisho

1912. 7.30 〜 1926.12.24

showa

1926.12.25 〜 1989. 1. 7

heisei

1989. 1. 8 〜

入力

複数のデータが与えられます。各データとして年、月、日を表す３つの整数が空白区切りで１行に与えられます。

入力の終わりまで処理してください。データの数は 50 を超えません。

出力

空白区切りの元号、年、月、日、または「pre-meiji」を１行に出力してください。

Sample Input

2005 9 3
1868 12 2
1868 9 7

Output for the Sample Input

heisei 17 9 3
meiji 1 12 2
pre-meiji

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

public class Main 
{
	public static void main(String[] args)
	{
		Scanner scanner = new Scanner(System.in);
		
		for(; scanner.hasNext();)
		{
			int year = scanner.nextInt();
			int month = scanner.nextInt();
			int day = scanner.nextInt();
			
			int[] era = {1868, 1912, 1926, 1989};
			String[] eraString = {"meiji", "taisho", "showa", "heisei"};
			
			int id=0;
			if(year < era[0])
			{
				id = 0;
			}
			else if(year == era[0])
			{
				if(month > 9 || (month==9 && day>7))
				{
					id = 1;
				}
			}
			else if(year < era[1])
			{
				id = 1;
			}
			else if(year == era[1])
			{
				id = 1;
				if(month > 7 || (month==7 && day>29))
				{
					id = 2;
				}
			}
			else if(year < era[2])
			{
				id = 2;
			}
			else if(year == era[2])
			{
				id = 2;
				if(month==12 && day>24)
				{
					id = 3;
				}
			}
			else if(year < era[3])
			{
				id = 3;
			}
			else if(year == era[3])
			{
				id = 3;
				if(month > 1 || (month==1 && day>7))
				{
					id = 4;
				}
			}
			else
			{
				id = 4;
			}
			
			String output;
			switch (id)
			{
				case 0:
					output = "pre-meiji";
					break;
	
				default:
					output = String.format("%1$s %2$d %3$d %4$d", eraString[id-1], year-era[id-1]+1, month, day);
					break;
			}			
			System.out.println(output);		
		}
	}
}