1년 365일
일주일 7일
365일을 7로 나누면 52주 나머지 1일
따라서 작년과 같은 날짜의 요일은 1일 증가
윤년 계산 2024 (4의 배수이면 2월은 29일까지) - 이때는 작년과 같은 날짜의 요일은 (3월보다 크거나 같으면) 2일 증가
4의 배수이지만, 100의 배수이면 평년!! (예외)
특정 요일 계산
- 오늘부터 N일 후는 무슨 요일일지 계산하라.
문제 분석
- 1년 = 365일
- 일주일 = 7일
- 365 / 7 = 52, 365 % 7 = 1 : 해가 지날수록 요일이 1씩 증가
- 윤년 계산 : 해가 4의 배수이면 요일 +2
- 평년 계산 : 해가 100의 배수이면 제외 (요일 +1)
코드 작성 - Sampling, Moduling
package algo;
// 날짜 : 현재 날짜를 구하기 위한 LocalTime 패키지
import java.time.LocalDate;
public class Clock03 {
public static void main(String[] args) {
// 1. Sampling : 오늘부터 720일 후는 무슨 요일일지 구하여라.
final int Day = 720;
int day = Day;
LocalDate now = LocalDate.now();
// 2. Hard Coding : 특징 찾기 1 - 1년 = 365
// 2. Hard Coding : 특징 찾기 2 - 연도가 오르면 같은 날짜는 요일 + 1
// 2. Hard Coding : 특징 찾기 3 - 윤년, 평년 계산 필요 (증가한 연도가 윤년이면 요일 +2, 평년이면 제외)
// 2. Hard Coding : 특징 찾기 4 - 720일을 365로 나눈 나머지를 7로 나눈 나머지를 더하고, 요일에 윤년, 평년, 연도 증가에 따른 요일 계산 등을 추가
int nowYear = now.getYear();
int nowDay = now.getDayOfWeek().getValue() % 7;
String dayofWeek = "";
// 3. Moduling
// 3-1. 연도가 바뀌면 규칙에 따라 요일 + 1
if (day / 365 > 0) {
day = day % 365;
nowYear++;
if (nowYear % 100 == 0) {
nowDay++;
} else if (nowYear % 4 == 0) {
nowDay = nowDay + 2;
} else nowDay++;
}
// 3-2. 요일을 증가시킨 후 재계산
nowDay = (nowDay + day) % 7;
if (nowDay == 1) dayofWeek = "monday";
else if (nowDay == 2) dayofWeek = "tuesday";
else if (nowDay == 3) dayofWeek = "wednesday";
else if (nowDay == 4) dayofWeek = "thursday";
else if (nowDay == 5) dayofWeek = "friday";
else if (nowDay == 6) dayofWeek = "saturday";
else if (nowDay == 0) dayofWeek = "sunday";
System.out.println("현재로부터 " + Day + "일 뒤의 요일 : " + dayofWeek);
}
}
Hard Coding을 통해 알아낸 특징
- 1년 = 365
- 연도가 오르면 같은 날짜에서 요일 + 1
- 윤년, 평년 계산 필요 (윤년일 경우 요일 +2, 평년일 경우 +1)
- N을 365로 나눈 나머지를 요일에 더하고 7로 나눈 나머지로 요일 계산이 가능
결과

증명
- 2025년 2월 10일 : 월요일
- 5일 뒤인 2월 15일 : 토요일 : N= 5

현재 날짜를 구하는 패키지 java.time.LocalDate
Share article