2016년
by Cori문제
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" |
풀이
1. Me
def solution(a, b):
answer = ''
day_count = 0
DATE = ['FRI','SAT','SUN','MON','TUE','WED','THU']
# 매 달마다 들어있는 요일 개수
days_m = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if a == 1:
day_count = b
# a = 2 -> 31(days_m[0]) + b
# a = 3 -> 31(days_m[0]) + 29(days_m[1]) + b
else:
for i in range(1, a): # 1 2 -> 0 1
day_count += days_m[i-1]
day_count += b
# print((day_count-1) % 7)
# day_count - 1 = 1 -> SAT, day_count - 1 = 2 -> SUN
return DATE[(day_count - 1) % 7]
우선 윤년에 대해 어렴풋이 알고있는 개념을 확실히 하기 위해 윤년에 대해 찾아보았다. 찾아보니, 윤년은 4로 나누어 떨어지는 년도이며, 그 해가 윤년인 경우 2월에 29일까지 존재한다 (1년 =366일). 윤년에 대해 어느정도 알았으니, 코드를 구상해 보았다. 1월 1일이 '금요일'이라 하였으므로 '금요일'부터 시작하는 요일 리스트를 만들고, 각 달의 요일 개수를 담고있는 리스트를 만듬. 이후 입력받은 월, 일과 1월 1일까지의 요일 차이수를 7로 나눈 나머지를 날짜 리스트의 인덱스로 활용하여, 요일을 구했다.
* 그 해가 4로 나누어 떨어지나 100으로도 나누어지는 경우에는 평년이라 하며, 4와 100으로도 나누어 떨어지나 400으로 나누어
떨어지는 경우에는 다시 윤년으로 계산한다.. 일단 윤년의 경우는 2월이 하루 더 있다고 알고 있으면 될 듯 !
2. Others
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]
months와 days 배열을 생각한 것 까지는 나와 똑같은데, 이후 코드를 나보다 훨씬 간결하게 작성하였다. months[:0] 일 경우 -> 빈 리스트를 반환한다 !! 그래서 sum(months[:0])을 하게 되면 0이 반환되고, 나처럼 a=1인 경우를 따로 구분하지 않고서도 리스트 슬라이싱을 이용하여 간결하게 작성할 수 있던 것 ..
* months[ : 0] -> [] 반환, months[ : 1] -> [31] 반환 .. 알아두자 !
import datetime
def getDayName(a,b):
t = 'MON TUE WED THU FRI SAT SUN'.split()
return t[datetime.datetime(2016, a, b).weekday()]
datetime 모듈을 사용하여 작성한 코드로, 모듈 활용의 좋은 예시라서 가져왔다. datetime.datetime().weekday() 함수를 활용하면, 정수로 요일을 반환(월요일 = 0, 일요일 = 6)한다.
'CS > Coding Test' 카테고리의 다른 글
체육복 (0) | 2021.08.22 |
---|---|
예산 (0) | 2021.08.22 |
가운데 글자 가져오기 (0) | 2021.08.22 |
같은 숫자는 싫어 (0) | 2021.08.22 |
나누어 떨어지는 숫자 배열 (0) | 2021.08.22 |
블로그의 정보
코딩하는 오리
Cori