본문 바로가기

Algorithm

[파이썬] 프로그래머스: 2016년

https://programmers.co.kr/learn/courses/30/lessons/12901

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

해당 날짜가 무슨 요일이 찾아내는 문제입니다

(예: 2016년 1월 1일이 금요일일 때, 2016년 a월 b일은 무슨 요일인지).

 

caldendar 모듈을 사용해서 푸는 방법

today의 기본 값은 월요일~일요일까지 0, 1, 2, 3, 4, 5, 6 으로 구분지어져 있습니다.

즉 calendar.weekday(2016, 1, 1)의 경우 4가 되기 때문에 (실제 요일),

days[4] = "FRI"가 됩니다.

만약 2016년 1월 1일이 토요일이라고 가정을 하면

days =["TUE", "WED", "THU", "FRI", "SAT", "SUN", "MON"] 로 설정하여 월요일인 "MON"을 뒤로 가게 하고,

days[4] = "SAT" 으로 되게끔 해주시면 됩니다. 

import calendar
def solution(a, b):
    today = calendar.weekday(2016, a, b)
    days =["MON", "TUE", "WED", "THU", 
                             "FRI", "SAT", "SUN"]
    return days[today]
    
solution(5, 24)

'''
'TUE'
'''

 

달과 요일별 list를 만들어서 푸는 방법

1. 달과 요일별 list를 만들어줍니다. 이때 달은 매달 실제로 존재하는 마지막 날짜를 넣고 [31, 29, 31, ...],

요일은 기준 년도 기준 1월 1일의 요일을 넣어줍니다 (2016이면 ['FRI', 'SAT', ...]).

기준 달 a까지의 총 지난 날짜를 더하고, b일을 더해줍니다 (1월 1일을 이미 계산하였기 때문에 여기에 1을 빼줍니다).

이후 총 요일 수인 7을 나누어 결과값을 구해줍니다.

def solution(a, b):
    months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
    return days[(sum(months[:a-1])+b-1)%7]

solution(5, 24)

'''
'TUE'
'''