Notice
Recent Posts
Recent Comments
Today
Total
05-17 00:00
Archives
관리 메뉴

Jeongchul Kim

programmers lv1 2016년 python 본문

Algorithm

programmers lv1 2016년 python

김 정출 2019. 9. 20. 15:51

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



나의 풀이(정답)

[1] 윤년은 태양년에 맞추기 위해 1년을 366일로 맞추고 2월 29일을 추가합니다. 

[2] 금요일로 시작하여 FRI ~ THU 원소가 있는 date의 배열을 만듭니다.

[3] day와 month의 차로 계산하여 요일을 계산합니다.

[4] month의 차이 만큼 해당 날을 더하기 위해 1~12월까지 month라는 배열을 만듭니다. [31, 29, … 31]

[5] 차이를 계산하고 date 배열에 % (mod)를 사용해 요일을 계산합니다.


def solution(a, b):

    # 실제 시험보는 곳에서 time을 라이브러리를 못쓴다면...

    # 2016년 1월 1일은 금요일. 윤년이다(2월29일 있음).

    # a는 달이다. b는 일이다.

    # 1월1일로부터 달력 계산을 위해 빼고 그 차이만큼 date라는 배열에서 인덱싱을 확인하면된다.

    # a는 1~12, b는 1~31

    # 2월1일을 계산하라면 month(2-1=> 1 * 31), day(1-1 => 0)

    date = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']

    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    

    diff = b-1

    for idx in range(a-1):

        diff += month[idx]

    

    return date[diff % 7]



다른 사람 풀이 1 

축약 버전입니다.


def solution(a, b):

    date = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']

    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    return days[(sum(months[:a-1])+b-1)%7]


다른 사람 풀이 2

datetime 라이브러리를 사용한 경우입니다.

datetime.datetime(YEAR, MONTH, DAY)
weekday() : 정수로 요일을 반환합니다. 월요일은 0 ~ 일요일은 6입니다.


def solution(a, b):

    date = 'MON TUE WED THU FRI SAT SUN'.split()

    return date[datetime.datetime(2016, a, b).weekday()]


Comments