공부블로그
1일 1코딩 본문
/**
* 83p
* 한 해 경과일수 구하기 프로그램+
* Q8~9문제
* 복습
*
*
*/
package basic.data_structure_repeat;
import java.util.Scanner;
public class DayOfYear {
//static int[][] mday=new int[2][12];
static int[][] mdays= {
{31,28,31,30,31,30,31,31,30,31,30,31}, //평년 4,100으로 나눠떨어지는 해
{31,29,31,30,31,30,31,31,30,31,30,31} //윤년 4,400으로 나눠떨어지는 해
};
static int isLeap(int year) {
return (year%4==0 && year%100!=0 || year%400==0)?1:0;
}
//서기 y년 m월 d일의 그 해 경과 일수를 구함.
static int dayOfYear(int y, int m, int d) {
int sum=0;
//배열 인덱스 0~m-2까지 접근
m-=2;
while(m>=0) { //조건부도 확인하고
sum+=mdays[isLeap(y)][m]; //직접 배열에 접근하는 코드도 살펴보기!
System.out.println(sum+"일"); //1월일때 문제가 발생...? 음수가 나오니까
m--;
};
return sum+=d;
// int days=d; //일 수
//
// for(int i=1;i<m;i++) {
// days+=mdays[isLeap(y)][i-1]; //평년이면 0 윤년이면 1
// }
// return days;
}
static int leftDayOfYear(int y, int m, int d) {
int sum=0;
//배열 인덱스 m~11까지 접근
while(m<12) {
sum+=mdays[isLeap(y)][m];
m++;
}
sum+=mdays[isLeap(y)][m-1]-d;
return sum;
}
public static void main(String[] args) {
Scanner stdIn=new Scanner(System.in);
int retry;
System.out.println("그 해 경과 일수를 구합니다.");
do {
System.out.print("년: "); int year=stdIn.nextInt(); //년
System.out.print("월: "); int month=stdIn.nextInt(); //월
System.out.print("일: "); int day=stdIn.nextInt(); //일
System.out.printf("그 해 %d일째입니다.\n",dayOfYear(year,month, day));
System.out.printf("%d일 남았습니다.\n",leftDayOfYear(year,month,day));
System.out.print("한 번 더 할까요? (1.예/2.아니오)");
retry=stdIn.nextInt();
}while(retry==1);
}
}
'IT > 알고리즘' 카테고리의 다른 글
1일 1코딩 (0) | 2022.04.10 |
---|---|
1일 1코딩 (0) | 2022.04.09 |
1일1코딩 (0) | 2020.09.10 |
1일1코딩_상속문제 (0) | 2020.09.09 |
1일 1코딩 - 생성자 오버로딩 (0) | 2020.09.08 |
Comments