[알고리즘 프로그래머스] 2016년 (LEVEL 1)

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

첫번째 입력 값으로는 , 두번째 입력 값으로는 이 주어집니다.

출력설명

에 맞는 요일을 출력하세요.

일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT입니다.

테스트케이스

입력예제 출력예제
5 24 “TUE”
5 27 “FRI”

해결방법

방법 1

1월 1일이 금요일이라고 한다.

요일은 총 7개 월, 화, 수, 목, 금, 토, 일이 존재한다.

입력으로 들어오는 을 나누지 않고 의 개수로만 만든다.

그러기 위해서 1월 ~ 12월 까지의 마지막 일 수가 들어있는 리스트를 생성한다.

반복문을 통해 입력으로 들어오는 전 까지의 요일들을 전부 다 더한 값을 요일의 개수인 7로 나눠서 나머지의 값이 만약 1이면 금요일이다.

이 이유는 1월 1일이 금요일이기 때문이다. 1 % 7 = 1 (요일은 7개)

요일이 들어갈 리스트를 만들어 X % 7로 만들어 질 수 있는 구역을 요일에 맞게 적합한 인덱스에 해당 요일을 넣는다.

나머지가 1 이 금요일이므로 0 은 수요일, 2는 토요일 … 이런 식으로 7개의 영역을 채운다.

반복문을 통해서 없은 나머지를 이용하여 요일의 리스트에 인덱스로 접근한다.

방법 2

python의 datetime 모듈을 이용하여 datetime()을 구해 weekday()를 구해 나온 값을 인덱스로 접근 할 수 있도록 만들어 놓은 요일 리스트에 접근 하여 정답을 도출한다.

weekday()를 통해서 얻은 값은 0 부터 월요일이다. 1 화요일 ….


코드 방법 1

def solution(a, b):
    MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    # 1일 부터는 금요일이기 때문에
    EACH_START_DAY = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
    
    # 해당 월 만큼 반복
    # 1월 1일은 금요일
    return EACH_START_DAY[(sum(MONTH[:a-1]) + b)%7]

코드 방법 2

from datetime import datetime

def solution(a, b):
    weekday = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
    return weekday[datetime(2016, a, b, 0, 0, 0).weekday()]

댓글남기기