개발자 블로그

프로그래머스 - 2016년 본문

알고리즘/프로그래머스

프로그래머스 - 2016년

hayongwoon 2022. 4. 22. 11:12

문제 설명

더보기

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일같은 날짜는 주어지지 않습니다)

입출력 예

abresult
5 24 "TUE"

 

나의 풀이

calender = {
    1:31, 2:29, 3:31, 4:30,
    5:31, 6:30, 7:31, 8:31,
    9:30, 10:31, 11:30, 12:31
}

week = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
def solution(a, b):
    for_day = 0
    for i in range(1, a):
        for_day += calender[i]

    which_day = (for_day + b) % 7
    answer = week[which_day-1]

    return answer

설명

1) 윤년 달력의 월과 일수를 딕셔너리로 만들어줌.

 

2) 1월 1일이 금요일부터 시작이라 금요일을 시작으로 리스트 만들어줌.

 

3) a월과 b일이 주어지는데 a의 전 월까지 각 월의 일수를 총 더해주고 b를 더해준다. -> 1/1 ~ 주어진 a월b일 까지의 총 일수

 

4) 총 일수에서 7을 나눈 나머지로 요일을 확인할 수 있다. ex) 나머지가 1이면 금요일, 2이면 토요일...이런식으로

 

5) 리스트의 인덱스로 접근하기 위해 which_day 에서 1을 빼준다. 0부터 시작이니까!