입력으로 3
, 11
, 4
를 받습니다.
첫달은 한주를 채우지 못하고 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}')