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()]
'Algorithm' 카테고리의 다른 글
programmers lv1 같은 숫자는 싫어 python (0) | 2019.09.20 |
---|---|
programmers lv1 가운데 글자 가져오기 python (0) | 2019.09.20 |
programmers lv1 K번째수 python (0) | 2019.09.20 |
programmers lv1 체육복 python (0) | 2019.09.18 |
programmers lv1 모의고사 python (0) | 2019.09.18 |