코드타카 특정일자의 요일 구하기
# 1. 요일 리스트 만들기
# days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
# 2. 각 달의 일수 정의(윤년):
# month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 3. (a,b)까지의 총 일수 계산
# 1월부터 (a-1)월까지 모든 일수를 더하고,
# 그 다음 b일을 더하면 전체 경과 일수가 나온다.
# 4. 요일 계산
#전체 경과일수를 7일로 나눴을 때의 나머지를 이용해 요일을 찾는다.
# 1/1 => 7로 나누면 나머지1 / 요일: days[나머지-1]요일
# 1/2 => 7로 나누면 나머지2 / 요일: days[나머지-1]요일
# 4월 18일 요일 구하기
def solution(a, b):
days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"] #1/1부터 금토일 월화수 리스트로 만들기
month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #각 월의 일수 리스트로 만들기
month_plus = 0
for i in range(1, a): #1부터 a월까지 날짜수를 합산하기 위해 순회
days_of_month = month_days[i-1] #만약 4/18을 구하고 싶으면 3월까지의 날짜 수 합산
month_plus += days_of_month
total = month_plus + b #거기에다 18일 더하기
day_index = total % 7 #7로 나눴을 때 나머지가 인덱스인 요일 구하기
return days[day_index-1]
solution(4, 18)
- 다른 풀이
-
def solution(a, b):
days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
total = sum(month_days[:a - 1]) + (b - 1) # b-1을 더하는 이유: 1월 1일 = total 0일차로 맞추기
return days[total % 7]
- 요일 리스트 days생성, 1월 1일이 금요일이므로 기준일이 days[0]
- 각 월의 일 수 담은 리스트 month_days 생성
- sum(month_day[:a - 1]) 1월부터 (a-1)까지의 일수 합산 ex) 4/18이라면 month[0:3]이니까 1월부터 3월까지의 합산
- b-1 : 현재 달의 b일 → 1월 1일을 0일차로 보정하려고 -1을 함, 그럼 바로 인덱스로 요일을 알아낼 수 있음.
- days[total % 7] 전체 경과일수를 7로 나눈 나머지를 days 리스트의 인덱스로 사용
-
| 일차 |
나머지 |
인덱스 |
요일 |
| 0일차 |
0 |
0 |
fri |
| 1일차 |
1 |
1 |
sat |
| 2일차 |
2 |
2 |
sun |
| b-1일차 |
x |
x |
|