ให้วันที่ในรูปแบบ YYYY-MM-DD ต้องคืนเลขวันในปี (1-366) เช่น 2019-02-10 เป็นวันที่ 41 ของปี
ขั้นตอนการแก้ปัญหา
- เตรียมอาร์เรย์จำนวนวันสะสมของแต่ละเดือน:
[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] - แปลงวันที่เป็น year, month, day
- ถ้าปีอธิกสุรทิน (leap year) ให้ปรับเดือนกุมภาพันธ์เป็น 29 วัน
- คืนค่า
days[month-1] + day
กฎปีอธิกสุรทิน
- หาร 400 ลงตัว -> อธิกสุรทิน
- หาร 4 ลงตัว แต่หาร 100 ไม่ลงตัว -> อธิกสุรทิน
- ที่เหลือ -> ไม่อธิกสุรทิน
ตัวอย่างโค้ด
class Solution(object):
def dayOfYear(self, date):
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
d = list(map(int, date.split("-")))
if d[0] % 400 == 0:
days[2] += 1
elif d[0] % 4 == 0 and d[0] % 100 != 0:
days[2] += 1
for i in range(1, len(days)):
days[i] += days[i-1]
return days[d[1]-1] + d[2]
ob1 = Solution()
print(ob1.dayOfYear("2019-02-10"))
อินพุต
"2019-02-10"
เอาต์พุต
41
วิธีแก้แบบ Pythonic (ใช้ datetime)
from datetime import datetime
def dayOfYear(date):
dt = datetime.strptime(date, "%Y-%m-%d")
return dt.timetuple().tm_yday
# หรือ manual แบบสั้น
def dayOfYear(date):
y, m, d = map(int, date.split("-"))
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
days[2] = 29
return sum(days[:m]) + d