Lv1. 2016년 ( Python )


Lv1. 2016년

# 문제 설명

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