白駿12437新カレンダー(小)(Python付き)


私が考えている解決策


問題の思考点


以下、図
  • で説明する.

  • 入力:3114.

  • 1ヶ月目は1週間も埋めきれずに残りました

  • 最初の月が1週間未満と来月の早期開始日数が1であることを考慮すると、最初の月の計算時の週数は2+2となります.

  • 来月は1を繰り上げて計算したので、10(=11-1)日の繰り上げ計算方法で計算します.

  • (アルゴリズムの流れのみを説明します.詳細は手動で例を書いて理解してください.コードを参照してください!)
  • コード実装

    import sys
    
    T = int(input())
    
    for tc in range(1, T+1):
        # m: months,
        # md: days of month
        # wd: days of week
        m, md, wd = map(int, sys.stdin.readline().split())
        # 행을 채우고 남은 값: initial remain
        ir = 0
        result = 0
        for i in range(m):
            q, r = divmod((md-ir), wd)
            # 달이 주(week)로 딱딱 나눠지는 경우
            if r == 0:
                result += q
                ir = 0
            else:
                # 마지막 달을 계산할 때
                if i == m-1:
                    result += (q+1)
                # 마지막 달을 제외한...
                else:
                    result += (q+2)
                ir = wd - r
        print(f'Case #{tc}: {result}')