본문 바로가기
Study Note/Java

JAVA_ Test100_ 만년달력

by 시뮝 2018. 5. 29.
728x90


Test100  만년달력

※ 서기 1년 1월 1일 : 월요일

※ 연도가 4의 배수이면서 100의 배수가 아니거나,  400의 배수이면 2월은 29일(윤년), 나머지 2월은 28일(평년)


※ 2018년 3월 달력을 그린다고 가정하면

  1. 1. 1 ~ 2018. 2. 28 까지의 전체 날 수를 구한다.

  그 날 수에 +1 연산을 수행하면... (2018년 3월 1일의 요일 확인)  3월의 달력 그릴 준비 끝.


※ 요일 = 전체날수 % 7


Test100.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Test100

{

public static void main(String[] args) throws IOException

{

// 인스턴스 클래스 선언

Calendars cd = new Calendars();


// 입력받기(연도, 월)

cd.input();

// 연산

cd.data();

// 결과 출력

cd.print();

}

}


class Calendars

{

// BufferedReader 인스턴스 생성

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


// 주요 변수 선언

int y, m, nalsu;

int[] months = {31, 0, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31};

String[] weekNames = {"일", "월", "화", "수", "목", "금", "토"};

int day; //-- 무슨요일부터인지 담을 변수

int[] days; // 해당 월에 며칠이 있는지 담을 변수



// 입력받기(연도, 월)

void input() throws IOException

{

do

{

System.out.print("『연도』를 입력하세요 : ");

y = Integer.parseInt(br.readLine());

}

while (y<1);


do

{

System.out.print("『월』을 입력하세요   : ");

m = Integer.parseInt(br.readLine());

}

while (m<1 || m>12);

}



// 연산

void data()

{

// 윤년인지 판단하기

if ((y%4==0 && y%100!=0) || y%400==0) //-- 윤년이라면

months[1] = 29;

else //-- 평년이라면

months[1] = 28;


// 이전 년도까지 날수 종합

nalsu = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400;

// 이전 월까지 날수 종합

for (int i=0; i<(m-1); i++)

nalsu += months[i];


// day에 잠깐 해당 월 날수 담기

day = months[m-1];

// days배열을 해당 월 날수만큼 칸만들기

days = new int[day];


// days배열에 1부터 마지막 일까지 담기

for (int i=0; i<days.length; i++)

days[i] = i+1;


// 무슨요일부터인지 day에 담기

day = nalsu%7+1;

}


// 결과 출력하기

void print()

{

System.out.printf("\n[%d년 %d월]\n\n", y, m);

System.out.println("일 월 화 수 목 금 토");

System.out.println("======================");


for (int i=0; i<day; i++)

System.out.print("   ");


for (int i=0; i<days.length; i++)

{

System.out.printf("%3d", days[i]);


if ((day+i+1)%7==0 && i!=days.length-1)

System.out.println();

}


System.out.println("\n======================");

}

}


cmd

『연도』를 입력하세요 : 2018

『월』을 입력하세요   : 5


[2018년 5월]


일 월 화 수 목 금 토

======================

        1  2  3  4  5

  6  7  8  9 10 11 12

 13 14 15 16 17 18 19

 20 21 22 23 24 25 26

 27 28 29 30 31

======================

계속하려면 아무 키나 누르십시오 . . .







728x90

댓글