seong

17 연,월,일 을 받아서 무슨 요일인지 출력하는 프로그램 본문

자바/자바 실습

17 연,월,일 을 받아서 무슨 요일인지 출력하는 프로그램

hyeonseong 2022. 7. 28. 17:46

풀이

  • 윤년을 조건식으로 넣어준다.
  • 1900년 1월 1일 이후의 요일을 구하는 방법은 입력받은 날짜 까지의  총 날짜 수 % 7의 값으로 구할 수 있다.
  • 해당 달의 날짜는 만약 2월 10일이라면 -> 31일 + 10일 + 총 날짜에 더해준다

윤년이란? 

  • 4년마다 2월이 29일 까지인 해가 있다 이런 것을 윤년 이라고 한다.
  • 하지만, 100의 배수의 해는 윤년이 아니다. 
  • 윤년이되면 날짜가 +1이 된다. 

 

package ex06;

import java.util.Scanner;

public class yearEx {

	public static void main(String[] args) {
		// ctrl + shift + f 자동 정렬
		/*
		 * year에서 1900을 빼고 365를 곱한다. : today += (year-1900) * 365
		 *  (year - 1900)/4 가 윤년의 횟수이므로 이 값을 더한다 : today += (year - 1900) /4;
		 *  주어진 연도가 윤년이고 주어진 월이 2월이나 1월이면 위의 결과에서 1을 뺀다
		 *  위의 결과에 주어진 월과 일까지의 날수를 더한다. 
		 * 요일을 구하기 위해선 구하고자하는 년월일까지의 모든 날짜수를 더한 후 7을 나누면된다.
		 */
		Scanner sc = new Scanner(System.in);

		System.out.print("연도를 입력하시오: ");
		int year = sc.nextInt();// 연도
		System.out.print("월을 입력하시오: ");
		int month = sc.nextInt(); // 월
		System.out.print("일을 입력하시오: ");
		int day = sc.nextInt(); // 일
		sc.close();
		
		int week; // 0~9 요일을 저장할 공간 
		int total_days = 0;

		total_days += (year - 1900) * 365; // 입력한 날짜 까지의 총 일수(윤달 미 포함)
		total_days += (year - 1900) / 4; // 윤년으로 인해 추가되는 날짜의 수 
		// 윤년 구하는 방법 ->  4로 나누어떨어지는 년도. -> 
		//4로 나누었지만 100으로 나누어 떨어지면 평년(윤년x)AND 400으로 나누어 떨어지면 윤년
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
				if((month == 2 || month == 1)) {
					total_days -=1;
				}
		}
		//각 달마다 날짜 계산
		if(month == 1) {
			total_days += day;
		}
		else if(month == 2) {
			total_days += day + 31;
		}
		else if(month == 3) {
			total_days += day + 31 + 28;
		}
		else if(month == 4) {
			total_days += day + 31 + 28 + 31;
		}
		else if(month == 5) {
			total_days += day + 31 + 28 + 31 + 30;
		}
		else if(month == 6) {
			total_days += day + 31 + 28 + 31 + 30 + 31;
		}
		else if(month == 7) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30;
		}
		else if(month == 8) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31;
		}
		else if(month == 9) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
		}
		else if(month == 10) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
		}
		else if(month == 11) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
		}
		else if(month == 12) {
			total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
		}

		
		week = total_days % 7;
		// 배열로 선언
		String arry[] =  new String[] {"일","월","화","수","목","금","토"};
		for(int i = 0; i < arry.length;i++) {
			if(week == i) {
			System.out.println(year + "년 " + month + "월 " + day + "일은 " + arry[i]+"요일입니다.");
			break;
			}
		}
//		if (week == 0) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "일요일입니다.");
//		} else if (week == 1) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "월요일입니다.");
//		} else if (week == 2) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "화요일입니다.");
//		} else if (week == 3) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "수요일입니다.");
//		} else if (week == 4) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "목요일입니다.");
//		} else if (week == 5) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "금요일입니다.");
//		} else if (week == 6) {
//			System.out.println(year + "년 " + month + "월 " + day + "일은 " + "토요일입니다.");
//		}

	}

}

 

결과

 

'자바 > 자바 실습' 카테고리의 다른 글

19 객체 지향,절차지향  (0) 2022.08.01
18 숫자 야구  (0) 2022.07.29
16 while문 + if문 (break, continue)  (0) 2022.07.28
15 if,else, else if문  (0) 2022.07.28
14 While 반복문  (0) 2022.07.28