[Level 1] 2016년 (Python)
Date: Updated:카테고리: programmers
문제 설명
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”
나의 풀이
일단 문제를 읽고나서 월별로 최대 몇일까지 있는지 확인하였다. 확인해보니 월별 일수가 29,31,30일 등 뒤죽박죽 이어서 규칙을 찾을수 없었다. 그래서 list로 선언하여 사용하기로 했다. 그 뒤 1월부터 파라미터로 주어지는 a(월) 의 직전 월까지 모든 일 수를 다 더하고 b(일) 값을 더한 뒤 7(요일 갯수)로 나누는 식으로 진행했다. 요일도 리스트로 선언해 사용한다.
- 월별 일 수를 list로 저장
- 요일 별 문자열을 list로 저장
- 문항에서 1월 1일이 금요일이라고 하였으니 금요일 부터 차례대로 리스트에 저장
- 1월부터 파라미터로 받은 a(월)의 직전 월까지의 모든 일수를 다 더함
- ex) a = 5 인경우, 1월 부터 4월까지 모든 일 수를 다 더함
- 그 뒤 두번째 파라미터로 받은 b(일)을 추가로 더 해줌.
- 모두 더한값에 7로 나눈 나머지 값을 요일 리스트 인덱스에 활용
- 7 = 요일의 갯수
def solution(a, b):
days_of_the_week = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
days_per_months = [31,29,31,30,31,30,31,31,30,31,30,31]
return days_of_the_week[((sum(days_per_months[:a-1]) + b) % 7) - 1]
다른 사람의 풀이
import datetime def solution(a,b): t = 'MON TUE WED THU FRI SAT SUN'.split() return t[datetime.datetime(2016, a, b).weekday()]
- 내장 모듈인 datetime을 활용하여 풀이
- datetime은 날짜와 시간을 다루는데 활용하기 좋은 함수들을 제공함
- datetime.datetime(year, month, day).weekday()는 파라미터로 받은 year, month, day에 해당하는 요일을 인덱스 값으로 반환.
- 0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일
다른사람들의 풀이를 보면 정말 매번 놀라는것 같다. 요일을 반환하는 내장 함수라니.. 문제를 풀기전에 관련 내장함수가 존재하는지 찾아보는것도 괜찮을것 같다.
댓글남기기