less than 1 minute read

Problem Statement

leetcode problem link

Brute Force [Accepted]

class Solution:
    def totalMoney(self, n: int) -> int:
        bank = 0
        monday = 1
        prev_day = 0
        for i in range(n):
            day_in_week = i % 7
            if day_in_week == 0:
                bank += monday
                prev_day = monday + 1
                monday += 1
            else:
                bank += prev_day
                prev_day += 1

        return bank

Editorial

Approach 1: Simulate

class Solution:
    def totalMoney(self, n: int) -> int:
        ans = 0
        monday = 1

        while n > 0:
            for day in range(min(n, 7)):
                ans += monday + day

            n -= 7
            monday += 1

        return ans

Approach 2: Math

class Solution:
    def totalMoney(self, n: int) -> int:
        k = n // 7
        F = 28
        L = 28 + (k - 1) * 7
        arithmetic_sum = k * (F + L) // 2

        monday = 1 + k
        final_week = 0
        for day in range(n % 7):
            final_week += monday + day

        return arithmetic_sum + final_week