# 다차원 배열
> 배열을 구성 요소로 하는 것이 2차원 배열, 2차원 배열을 구성 요소로 하는 것이 3차원 배열이고,
> 이런 배열을 보통의 배열(1차원 배열)과 구별하기 위해 다차원 배열이라고 한다.
## 한 해의 경과 일 수를 계산하는 프로그램
예를 들어 4월 15일의 경과 일 수를 구하면
-> 1월의 일 수 + 2월의 일 수 + 3월의 일 수 + 15
일반적으로 나타내면 m월 d일의 그 해의 경과 일 수는
->1월,2월....m-1월일 일 수의 합 + d
public class DayOfYear {
// 각 달의 일수
static int[][] mdays = {
{31,28,31,30,31,30,31,31,30,31,30,31}, //평년
{31,28,31,30,31,30,31,31,30,31,30,31} //윤년
};
//서기 year년은 윤년인가?{윤년:1/평년:0}
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 days = d; //일 수
for(int i=1; i<m; i++) //1월~(m-1)월의 일 수를 더함
days += mdays[isLeap(y)][i-1];
return days;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
int retry;
System.out.println("그 해 경과 일수를 구합니다.");
do {
System.out.println("년 :"); int year = stdIn.nextInt();
System.out.println("월 :"); int month = stdIn.nextInt();
System.out.println("일 :"); int day = stdIn.nextInt();
System.out.printf("그 해 %d일째입니다.\n", dayOfYear(year, month, day));
System.out.println("한 번 더 할까요? (1.예/0.아니오) : ");
retry = stdIn.nextInt();
} while (retry == 1);
}
}
매개변수 (year)로 연도가 윤년이면 1을 반환하고, 평년이면 0을 반환하는 메서드 isLeap을 통해 윤년과 평년을 구분.
메서드 dayOfYear는 다음과 같은 순서로 경과 일 수를 구함.
1. days에 d의 값을 그대로 대입.
2. i를 1부터 m-1까지 증가하면서 days에 y년 i월의 일 수를 더함.(즉 , 1월부터 m-1월까지 일 수를 더함.)
따라서, y년 i월의 일 수는 mdays[isLeap(y)][i-1]로 구한다.
'ALGORITHM' 카테고리의 다른 글
이진검색[binary search] (0) | 2022.01.26 |
---|---|
[ALGORITHM] 알고리즘 선형 검색 (0) | 2022.01.05 |
[ALGORITHM] 소수의 나열 (0) | 2021.12.31 |