IT/알고리즘

1일 1코딩

So1_b 2022. 4. 10. 14:17
package basic.data_tructure;
import java.util.Scanner;

public class Q11 {
	int y; //년도
	int m; //월
	int d; //일
	
	static int[][] days= { 
			{31,28,31,30,31,30,31,31,30,31,30,31}, //평년 mday[0]
			{31,29,31,30,31,30,31,31,30,31,30,31}  //윤년 mday[1]
	};
	
	Q11(int y, int m, int d){ //생성자
		this.y=y;
		this.m=m;
		this.d=d;
	}
	
	//평년, 윤년 확인하는 메서드
	//평년:0반환, 윤년:1반환
	int isLeap(int year) {
		return (year%4==0 && year%100!=0||year%400==0)?1:0;
	}
	
	//n일 뒤의 날짜를 반환
	void YMDafter(int n){
		int num=isLeap(y); //평년,윤년 확인
		
		System.out.println(y+"년도");
		if (num==0) System.out.println("평년입니다.");
		else if (num==1) System.out.println("윤년입니다.");
		
		d+=n; 
		
		while(d>days[num][m-1]) {
			d=d-days[num][m-1]; //일수정리
			m++;
			if(m>12) { //달이 12월이 넘었을 때
				y++;
				num=isLeap(y); //윤년평년 확인.
				m=m-12; //월 변경
			}
		}System.out.printf("%d일 후: %d년도 %d월 %d일 입니다.\n",n,y,m,d);
		return;
	}
	
	//n일 앞의 날짜를 반환
	void YMDbefore(int n) {
		int num=isLeap(y);
		d-=n;
		while(d<1) { //일수가 음수일 때
			m--; //월 감소
			if(m<1) { //월이 음수가 되면 년도 변경
				y--;
				num=isLeap(y);
				m=12+m; 
			}
			d=days[num][m-1]+d;
		}System.out.printf("%d일 전: %d년도 %d월 %d일 입니다.",n,y,m,d);
		return;
	}
	public static void main(String[] args) {
		Q11 ymd=new Q11(2021, 12, 1);
		ymd.YMDafter(62);
		ymd.YMDbefore(62);
		
	}
}