반응형
Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

UP

[프로그래머스 : PYTHON] 2016 본문

알고리즘/기타

[프로그래머스 : PYTHON] 2016

cijbest 2021. 5. 12. 16:22

문제 설명

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 result
5 24 "TUE"

 

문제풀이

윤달은 2월이 29일까지 있는 날입니다.

a월 b일의 요일을 구하기 위해선 1월부터 a-1월까지의 날 수를 더하고 b만큼의 일 수를 더한 후 7로 나누었을 때의 나머지를 이용해서 요일을 구하면 된다.

 

예) 2016년 3월 12일

일 수 = ((1월달의 일수 + 2월달의 일수) + 12일) % 7 = ((31 + 29) + 12) % 7 = 2 (토요일)

 

요일은 1월 1일이 금요일이라는 말은 1 % 7 = 1 즉, 나머지가 1이라는 말이므로 요일을 담고 있는 days 배열을 초기화할때 '목요일~수요일' 순으로 배치한다.

 

 

전체코드

def solution(a, b):
    
    months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days = ['THU','FRI','SAT','SUN','MON','TUE','WED']
    
    count = 0
    for i in range(a-1):
        count += months[i]
    count += b
    answer = days[count%7]
    
    # 위의 5줄의 코드를 한 줄로 줄일 수 있다!
    # return days[(sum(months[:a-1])+b)%7]
    
    return answer

 

반응형
Comments