날짜와 요일이 나와서 지레 겁먹었던 것이 알고리즘을 못 푼 가장 큰 원인이었다.
그래서 예제를 참고해서 이문제의 원리를 접근 및 분석 해보았다.
1) 12달 중 2월은 윤달이라고 해서 일수가 변한다. 그러면 내가 입력한 월과 일의 총 일수가 바뀔 수있다. 제한 조건에 2016년은 윤년(29일)이라고 제시함.
2) 내가 입력한 달의 전달까지 일수를 먼저 계산후 내가 선택한 달에서 입력한 일을 더한다.
2016년이 금요일 부터 시작하니까 [금,토,일,월,화,수,목]의 순으로 해당일수를 반복하여 맨 마지막 순서의 요일이 해당년도의 월 일의 요일이 되는 것이다!!!
public class Q13 {
public String solutionQ13(int a, int b) {
String answer = "";
//1월1일이 금요일이니까 계산하기 편하도록 일주일 중 금요일이 시작처럼 배열
String[] day={"FRI","SAT","SUN","MON","TUE","WED","THU"};
int[] last={31,29,31,30,31,30,31,31,30,31,30,31};
//2016년의 몇번째 날인지 저장할 변수
int date=0;
//1.월별 마지막 날 수의 합
for(int i=0; i<a-1; i++){
date += last[i];
}
//2.a-1달까지의 일수 + 내가 선택한 a달의 일까지 일수(해당날은 포함 안되니까 -1)
date += b-1;
//3.일수%7로 요일 구해서 리턴
return day[date%7];
}
}