#자바 #배열 #윤년 #평년 #달력 #캘린더

 

 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일까지의 일자의 갯수

  int[] maxDate = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  
  if(year % 4 ==0 && year % 100 !=0 || year % 400 ==0) {
   maxDate[1]=29; // 윤년일 경우
  }
  
  // 작년
  int lastYear = year-1;
  // 작년까지 발생한 윤년의 횟수
  int leapYear_cnt = (lastYear/4) - (lastYear/100) + (lastYear/400);
  // 해당년의 해당월의 1일까지의 일자 수 구하기
  int dayOfYear = 1;
  

  
  for(int i=0; i<month-1; i++) {
   dayOfYear += maxDate[i];
  }  
    // 해당 월의 첫번째 날짜의 요일
    int dayOfweek = (lastYear + leapYear_cnt + dayOfYear)%7;
    

    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");
    }
     // 월에 따른 날짜 출력 조건
    int lastDay = maxDate[month-1];
    
    // 날짜 출력
    for(int i = 1; i<=lastDay; i++) {
     System.out.print(i + "\t");
     if((dayOfweek+i)%7 ==0) {
      System.out.println();
     }
    }

    
 }

+ Recent posts