import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public static void main(String[] args) throws NumberFormatException, IOException {
// 년와 월을 입력 받아 달력을 출력
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
System.out.print("년을 입력해주세요 : ");
int year = Integer.parseInt(read.readLine());
System.out.print("월을 입력해주세요 : ");
int month = Integer.parseInt(read.readLine());
// 해당 월 첫번째 날짜(1일)가 무슨 요일인지 구하기
// 서기 2018년 태양력(그레고리력), 1년(365일) 일주일 7일 => 365 % 7 == 1
/*
1년 1월 1일 : 월요일
2년 1월 1일 : 화요일
3년 1월 1일 : 수요일
4년 1월 1일 : 목요일(윤년 - 366일 => 366 % 7 == 2)
5년 1월 1일 : 토요일
*/
// 1.1.1 ~ 2018.7.1 : (2017*365) + 올해 7월 1일(31+ 28 + 31 + 30 + 31 + 30 + 1) % 7 = 0~6
// 1.1.1 ~ 2018.7.1 : 작년(2017*1) + 작년까지 윤년의 발생 횟수
// + 올해 7월 1일(31+ 28 + 31 + 30 + 31 + 30 + 1) + % 7 = 0~6
String first_day="";
int month_day =0;
// 해당 년이 윤년인지 판별
boolean isLeapYear = false; // 평년
if(year % 4 ==0 && year % 100 !=0 || year % 400 ==0) {
isLeapYear = true; // 윤년
}
// 작년
int lastYear = year-1;
// 작년까지 발생한 윤년의 횟수
int leapYear_cnt = (lastYear/4) - (lastYear/100) + (lastYear/400);
// 해당 월의 1일까지의 일자의 갯수
int dayOfYear = 1;
for(int i=1; i<month; i++) {
switch(i) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
dayOfYear+=31;
break;
case 2 :
if(isLeapYear) {
dayOfYear+=29;
}
else {
dayOfYear+=28;
}
break;
default : dayOfYear+=30; break;
}
} // 해당 월의 첫번째 날짜의 요일
int dayOfweek = (lastYear + leapYear_cnt + dayOfYear)%7;
// 월에 따른 날짜 출력 조건
int lastDay = 0;
if(month == 4 || month == 6 || month == 9 || month == 11) {
lastDay = 30;
}
else if(month == 2) {
lastDay = isLeapYear ? 29 : 28;
}
else {
lastDay = 31;
}
System.out.printf("%d년 %02d월\n", year, month);
System.out.printf("일\t월\t화\t수\t목\t금\t토\n");
// 공백 출력
for(int i =0; i<dayOfweek; i++) {
System.out.print("\t");
}
// 날짜 출력
for(int i = 1; i<=lastDay; i++) {
System.out.print(i + "\t");
if((dayOfweek + i)%7 ==0) {
System.out.println();
}
}
/*switch(dayOfweek) {
case 0 : first_day = "일요일"; break;
case 1 : first_day = "월요일"; break;
case 2 : first_day = "화요일"; break;
case 3 : first_day = "수요일"; break;
case 4 : first_day = "목요일"; break;
case 5 : first_day = "금요일"; break;
case 6 : first_day = "토요일"; break;
}*/
}
'IT > JAVA' 카테고리의 다른 글
[JAVA/자바] 메서드 생성을 통해, 각 과목의 총점 및 평균 구하기 (0) | 2018.08.07 |
---|---|
[JAVA/자바] 기본적인 메서드 생성을 통해 덧셈과 최대값을 구해보기 (0) | 2018.08.07 |
[JAVA/자바] Do ~ While 문을 사용하여 각 과목의 점수를 입력 받아 총점 및 평균 구하기 (0) | 2018.08.05 |
[JAVA/자바] While, For문을 사용한 구구단 출력 (0) | 2018.08.05 |
[JAVA/자바] 삼각형(별/*) 찍기(for) (0) | 2018.08.05 |