해당 문제는 여기에서 확인하실 수 있습니다.
2016년 1월 1일은 금요일이라는 조건을 기반으로 입력된 날짜가 무슨 요일인지 계산하려면, 날짜와 요일 간의 관계를 먼저 파악해야 합니다. 요일은 7일 주기로 반복되며, 특정 날짜에서 기준 날짜까지의 총 일수를 계산하여 요일을 도출할 수 있습니다.
입력된 날짜를 계산하기 위해 각 달의 날짜 수를 배열로 저장합니다. 2016년은 윤년이므로 2월은 29일입니다. 이후 입력받은 달 이전까지의 모든 날짜를 합산하고, 해당 달의 날짜를 추가하여 기준 날짜인 1월 1일부터 입력된 날짜까지의 누적 일수를 구합니다.
기준 날짜인 1월 1일은 금요일이므로 인덱스 5로 설정합니다. 누적된 날짜에 4를 더해 금요일부터 시작하는 요일 순서를 반영한 뒤, 7로 나눈 나머지를 사용하여 입력 날짜의 요일을 결정합니다. 마지막으로, 요일 이름을 저장한 배열에서 계산된 인덱스를 사용해 해당 요일을 반환합니다.
class Solution {
public String solution(int a, int b) {
// 요일 배열: 일요일부터 토요일까지 순서대로 저장
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
// 각 월의 날짜 수 (2016년은 윤년이라 2월은 29일)
int[] daysInMonths = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 총 날짜 수를 계산하기 위한 변수
int totalDays = 0;
// 1월부터 (a-1)월까지의 날짜를 누적합
for (int i = 1; i < a; i++) {
totalDays += daysInMonths[i];
}
// 입력된 날짜 b를 추가
totalDays += b;
// 2016년 1월 1일은 금요일(=5번째 요일)이며, 총 날짜에 4를 더해 요일 계산
int dayIndex = (totalDays + 4) % 7;
// 계산된 요일 반환
return week[dayIndex];
}
}