[알고리즘] 13. 특정 요일 계산 (N일 후의 요일)

문정준's avatar
Feb 10, 2025
[알고리즘] 13. 특정 요일 계산 (N일 후의 요일)
💡
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. 1년 = 365
  1. 연도가 오르면 같은 날짜에서 요일 + 1
  1. 윤년, 평년 계산 필요 (윤년일 경우 요일 +2, 평년일 경우 +1)
  1. N을 365로 나눈 나머지를 요일에 더하고 7로 나눈 나머지로 요일 계산이 가능
 

결과

notion image
 

증명

  • 2025년 2월 10일 : 월요일
  • 5일 뒤인 2월 15일 : 토요일 : N= 5
 
notion image
 
현재 날짜를 구하는 패키지 java.time.LocalDate
Share article

sxias