백준 12437 새로운 달력(small)(with Python)

daeungdaeung·2021년 7월 28일
0

내가 생각한 Solution

문제에서 생각해볼 점

  • 아래 그림으로 설명 드리겠습니다.

  • 입력으로 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}')
profile
개발자가 되고싶읍니다...

0개의 댓글

관련 채용 정보