Lv1. 2016년 ( Python )
# 문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.
# 제한 사항
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
# 입출력 예
a | b | n |
---|---|---|
5 | 24 | “TUE” |
문제 해결 시 고려사항
- 달 별 일수 계산과 요일 인덱스 접근
본 문제는 1월 1일이 금요일이라고 가정하였을 때, 해당 연도(2016년)의 a월 b일의 요일을 알아내는 문제이다. 따라서 1월 1일을 기점으로 a월 b일까지의 일수 차이를 계산하면 된다. 여기서 말하는 일수 차이를 계산하기 위해서는 각 달 별로 가지는 일수를 알아야 한다. 따라서 아래와 같은 리스트를 만들어주었다.
#달 별로 존재하는 일수 mons = [31,29,31,30,31,30,31,31,30,31,30,31] days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
위와 같은 정보들을 토대로 1월 1일과 a월 b일의 일수차이를 아래와 같이 계산하였다.
# 1월 1일 기준 시작이기 때문에 -1을 초기값으로 가짐 sums = -1 # a-1번 째 달까지 해당 달의 일수를 sums에 더함 for i in range(a-1): sums += mons[i] # a번 째 달의 b일수를 더함 sums += b
이 후 days 리스트의 원소 중 sums를 7로 나눈 나머지 인덱스에 해당되는 원소를 반환하면 답이다.
전체 코드
def solution(a, b):
answer = ''
#달 별로 존재하는 일수
mons = [31,29,31,30,31,30,31,31,30,31,30,31]
days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
# 1월 1일 기준 시작이기 때문에 -1을 초기값으로 가짐
sums = -1
# a-1번 째 달까지 해당 달의 일수를 sums에 더함
for i in range(a-1):
sums += mons[i]
# a번 째 달의 b일수를 더함
sums += b
# 계산된 일수 만큼 뒤의 요일을 반환
answer = days[sums%7]
return answer