연, 월, 일을 받아서 무슨 요일인지 출력하는 프로그램.
1] 문제
연, 월, 일을 받아서 무슨 요일인지 출력하는 프로그램을 작성하라.
[실행결과]
연도를 입력하시오: 2012
월을 입력하시오 : 7
일을 입력하시오 : 28
2012년 7월 28일은 토요일입니다.
2] 알고리즘 및 설명
Step 1 :
1900/1/1(일요일)부터 입력된 날짜 사이에 얼마나 많은 날이 있는지를 계산한다.
(01년 1월 1일부터 할 수 있지만 오차와 루핑을 줄이기 위해 1900년도에서부터 일수를 계산한다.)
Step 2 :
입력받을 변수(year,month,days)와 총합일수를 저장할 변수를 선언하고 입력받는다.
Step 3 :
(year-1900)/4가 윤년의 횟수이므로 이 값을 총합일수에 더한다.
윤년을 구하는 공식은 year/4-year/100+year/400이지만 1900-2100년까지는 위의 식의 결과 값과 윤년의 횟수가 같다.
Step 4 :
주어진 연도가 윤년이고 1월이나 2월이면 총합일수에서 –1을 한다.
Step 3에 의해 1900/1/1은 위의조건에 만족하여 총합일수-1이 된다. 따라서 총합일수의 초기 값을 1로 정한다.
Step 5 : 총합일수에 월과 일의 날수를 더한다.
Step 6 : (총합일수%7)이 요일이 된다.
ex) 1%7=일요일
2%7=월요일
3] 프로그램 코드
import java.util.*;
class Assign2 {
public static void main(String[] args) {
int Total_Days = 1, sw = 0;
int year, month, days;
Scanner scan = new Scanner(System.in);
System.out.println("input year");
year = scan.nextInt();
System.out.println("input month");
month = scan.nextInt();
System.out.println("input days");
days = scan.nextInt(); // Step 2
switch (month) {
case 1:
Total_Days += 0;
break;
case 2:
Total_Days += 31;
break;
case 3:
Total_Days += 59;// 31+28;
break;
case 4:
Total_Days += 90;// 31+28+31;
break;
case 5:
Total_Days += 120;// 31+28+31+30;
break;
case 6:
Total_Days += 151;// 31+28+31+30+31;
break;
case 7:
Total_Days += 181;// 31+28+31+30+31+30;
break;
case 8:
Total_Days += 212;// 31+28+31+30+31+30+31;
break;
case 9:
Total_Days += 243;// 31+28+31+30+31+30+31+31;
break;
case 10:
Total_Days += 273;// 31+28+31+30+31+30+31+31+30;
break;
case 11:
Total_Days += 304;// 31+28+31+30+31+30+31+31+30+31;
break;
case 12:
Total_Days += 334;// 31+28+31+30+31+30+31+31+30+31+30;
break;
}
Total_Days += ((year - 1900) * 365) + ((year - 1900) / 4) + days;
// Step 3,5
if ((year - 1900) % 4 == 0 && (month == 1 || month == 2))
Total_Days -= 1;
// Step 4
System.out.println(Total_Days);
switch (Total_Days % 7) {
case 0:
System.out.println(year + "/" + month + "/" + days + " = " + "Saturday");
break;
case 1:
System.out.println(year + "/" + month + "/" + days + " = " + "Sunday");
break;
case 2:
System.out.println(year + "/" + month + "/" + days + " = " + "Monday");
break;
case 3:
System.out.println(year + "/" + month + "/" + days + " = " + "Tuesday");
break;
case 4:
System.out.println(year + "/" + month + "/" + days + " = " + "Wednesday");
break;
case 5:
System.out.println(year + "/" + month + "/" + days + " = " + "Thursday");
break;
case 6:
System.out.println(year + "/" + month + "/" + days + " = " + "Friday");
break;
// Step 6
}
}
}
import java.util.*;
class Assign2 {
public static void main(String[] args) {
int Total_Days = 1, sw = 0;
int year, month, days;
Scanner scan = new Scanner(System.in);
System.out.println("input year");
year = scan.nextInt();
System.out.println("input month");
month = scan.nextInt();
System.out.println("input days");
days = scan.nextInt(); // Step 2
switch (month) {
case 1:
Total_Days += 0;
break;
case 2:
Total_Days += 31;
break;
case 3:
Total_Days += 59;// 31+28;
break;
case 4:
Total_Days += 90;// 31+28+31;
break;
case 5:
Total_Days += 120;// 31+28+31+30;
break;
case 6:
Total_Days += 151;// 31+28+31+30+31;
break;
case 7:
Total_Days += 181;// 31+28+31+30+31+30;
break;
case 8:
Total_Days += 212;// 31+28+31+30+31+30+31;
break;
case 9:
Total_Days += 243;// 31+28+31+30+31+30+31+31;
break;
case 10:
Total_Days += 273;// 31+28+31+30+31+30+31+31+30;
break;
case 11:
Total_Days += 304;// 31+28+31+30+31+30+31+31+30+31;
break;
case 12:
Total_Days += 334;// 31+28+31+30+31+30+31+31+30+31+30;
break;
}
Total_Days += ((year - 1900) * 365) + ((year - 1900) / 4) + days;
// Step 3,5
if ((year - 1900) % 4 == 0 && (month == 1 || month == 2))
Total_Days -= 1;
// Step 4
System.out.println(Total_Days);
switch (Total_Days % 7) {
case 0:
System.out.println(year + "/" + month + "/" + days + " = " + "Saturday");
break;
case 1:
System.out.println(year + "/" + month + "/" + days + " = " + "Sunday");
break;
case 2:
System.out.println(year + "/" + month + "/" + days + " = " + "Monday");
break;
case 3:
System.out.println(year + "/" + month + "/" + days + " = " + "Tuesday");
break;
case 4:
System.out.println(year + "/" + month + "/" + days + " = " + "Wednesday");
break;
case 5:
System.out.println(year + "/" + month + "/" + days + " = " + "Thursday");
break;
case 6:
System.out.println(year + "/" + month + "/" + days + " = " + "Friday");
break;
// Step 6
}
}
}