
프로그래머스 LV1 2016년 (연습문제)
프로그래머스 lv1 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일같은 날짜는 주어지지 않습니다)
입출력 예
a | b | result |
---|---|---|
5 | 24 | “TUE” |
해당 월에 몇일까지 있는지 아는 법
먼저 주먹을 쥔다. 그리고 검지튀어나온 부분부터 시작해서 센다. 그러면 새끼 손가락부분까지 7월이 된다.
그 다음에 다시 새끼 손가락부터 시작한다. 그럼 중지 튀어나온 부분이 12월이 된다.
튀어나온 부분은 31일까지고 들어간 부분은 30일까지이다. 2월은 28일까지이고, 2월 29일은 그레고리력으로 60번째(윤년에만 있다.) 날이다.
파이썬을 사용해서 해당 월이 총 몇일인지 알아내는 법
calendar.monthrange(year,month)
를 사용한다.
tuple로 (1일이 무슨 요일인지, 총 몇일)
를 리턴한다.
import calendar
calendar.monthrange(2021,4)
>>>(3, 30)
Signature: calendar.monthrange(year, month)
Docstring:
Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.
0~6까지 월요일부터 일요일이다.
풀이
# 요일을 리턴한다. 1/1은 금요일, 윤년 = 366일. 2월 29일까지 있음.
# a 는 월, b는 일. a는 12까지 있고 b는 30, 31일까지 있다. 1월은 31일까지 있고 2월이 29, 3월이 31일까지. 4월이 30일
# if a가 짝수 = 30일 근데 예외로 2월은 29까지만.
# 1/1일이 금요일이면
# 2016년 이다.
def solution(a, b):
# answer = ''
months = {1:31, 2:29, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12: 31}
days = {1:"FRI", 2:"SAT", 3:"SUN", 4:"MON", 5:"TUE", 6:"WED", 0:"THU"}
sum_days = 0
iter_months = list(range(1, a))
for month in iter_months:
sum_days += months.get(month)
count_day = sum_days + b
count_day = count_day % 7
answer = days.get(count_day)
return answer
if __name__ == "__main__":
a, b = 5, 24 # result = "TUE"
print(solution(a,b))```
>>>TUE
# 다른 사람 풀이 1 함수활용의 좋은 예
import datetime
def getDayName(a,b):
t = 'MON TUE WED THU FRI SAT SUN'.split()
return t[datetime.datetime(2016, a, b).weekday()]
#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))
>>>TUE
위 코드에서 재밌는 점
.split()
함수
datetime.datetime().weekday()
: weekday()함수는 월요일이 0부터 시작.
# 다른 사람 풀이2 함수활용의 좋은 예
def getDayName(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]
#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges