시간

시간 제한1초메모리 제한128 MB

요약
두 시각과 3개월, 2일 같은 기간이 주어질 때, 그레고리력 윤년 규칙을 적용해 단위 경계에 맞춰 떨어지는 온전한 기간이 두 시각 사이에 몇 개 들어가는지 센다.
난이도

보통10점 중 7점

유형
수학, 구현, 시뮬레이션, 이분 탐색
정답자
아직 제출이 없습니다

문제

시각은 여섯 개의 정수 y,m,d,h,min,sy, m, d, h, \mathit{min}, s 로 주어지며, 각각 연, 월, 일, 시, 분, 초를 의미한다. 범위는 1970≤y<20301970 \le y < 2030, 0<m<130 < m < 13, 0<d<320 < d < 32, 0≤h<240 \le h < 24, 0≤min<600 \le \mathit{min} < 60, 0≤s<600 \le s < 60 이다.

두 시각 사이에 주어진 길이의 기간(period)이 몇 번 들어가는지 세는 프로그램을 작성하라. 기간은 양의 정수와 시간 단위를 나타내는 단어의 쌍으로 주어지며, 단어는 year, month, day, hour, minute, second 중 하나이다.

윤년 규칙은 다음과 같다. 4로 나누어떨어지는 해는 윤년이지만, 100으로 나누어떨어지는 해는 윤년이 아니고, 다시 400으로 나누어떨어지는 해는 윤년이다. 윤년 여부에 따라 한 해의 길이가 달라지며, 2월의 길이도 마찬가지로 달라진다.

시간 단위는 언제나 통상적인 시작점에서 시작한다. 예를 들어 year는 1월 1일에, month는 그 달의 1일에, day는 0시 0분 0초에 시작한다. 하나의 기간은 그 마지막 초가 끝난 뒤에 종료된다. 따라서 두 시각 사이에 이러한 단위 경계에 정확히 맞추어 들어가는, 서로 겹치지 않는 기간의 최대 개수를 출력하면 된다.

입력

입력은 여러 개의 블록으로 이루어진다. 각 블록은 세 줄로 구성된다. 블록의 첫 번째 줄에는 시각 D1D_1이, 두 번째 줄에는 시각 D2D_2가 주어진다. 항상 D1D_1이 D2D_2보다 앞선다. 한 줄 안의 모든 수는 공백 하나로 구분된다. 주어지는 시각은 항상 올바른 값이라고 가정해도 된다. 세 번째 줄에는 기간이 주어지며, 수와 단어 사이에는 공백이 하나 있다. 각 블록 뒤에는 빈 줄이 하나씩 있다.

출력

입력의 각 블록에 대응하는 줄을 출력한다. 한 블록에 대응하는 줄에는 두 시각 사이에 주어진 기간이 몇 번 들어가는지를 나타내는 정수 하나를 출력한다.

예제1

  1. 예제 1

    입력
    1997 12 31 23 59 59
    1998 1 1 0 0 0
    1 second
    
    2000 2 29 0 0 0
    2000 2 29 23 59 59
    1 day
    
    2000 2 29 0 0 0
    2000 3 1 0 0 0
    24 hour
    
    1996 12 31 20 30 0
    1997 1 1 7 30 0
    60 minute
    
    1996 12 31 20 30 0
    1997 1 1 7 30 0
    1 hour
    
    예상 출력
    1
    0
    1
    11
    10