월 일로 이루어진 날짜를 두 개 입력 받아, 두 번째 날짜가 첫 번째 날짜의 며칠째인지를 출력하는 프로그램을 작성하라.
월은 1이상 12이하의 정수이다. 각 달의 마지막 날짜는 다음과 같다.
1/31, 2/28, 3/31, 4/30, 5/31, 6/30, 7/31, 8/31, 9/30, 10/31, 11/30, 12/31
두 번째 날짜가 첫 번째 날짜보다 항상 크게 주어진다.
가장 첫 줄에는 테스트 케이스 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 4개의 수가 주어진다.
첫 번째 수가 월을 나타내고 두 번째 수가 일을 나타낸다. 그 다음 같은 형식으로 두 번째 날짜가 주어진다.
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
T = int(input()) # 입력 받은 값을 정수형으로 변환해서 T에 저장
for i in range(1, T+1): # 1부터 T까지 1씩 증가하는 반복문
li = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 1월부터 12월까지 일 수를 저장해 놓은 리스트 li
# 0은 인덱스를 활용한 값 계산을 편하게 하기 위해서
FM, FD, LM, LD = map(int, input().split())
# 빈 칸을 기준으로 입력 받은 값을 정수형으로 변환해서 FM, FD, LM, LD에 순서대로 저장
# FM(첫 번째 달), FD(첫 번째 날), LM(두 번째 달), LD(두 번째 날)
if (1 <= FM <= 12 and 1 <= LM <= 12 and 1 <= FD <= li[FM] and 1 <= LD <= li[LM]):
# 제약사항에 따른 조건문
for j in range(FM): # 0부터 첫 번째 달 - 1까지 1씩 증가하며 반복
FD += li[j] # 리스트 li에서 달의 일 수를 가지고와서 첫 번째 날에 더함
for k in range(LM): # 0부터 두 번째 달 -1까지 1씩 증가하며 반복
LD += li[k] # 리스트 li에서 달의 일 수를 가지고와서 두 번째 날에 더함
min_day = LD - FD + 1 # 두 번째 날에서 첫 번째 날을 뺀 값에 1을 더한 값을 min_day에 저장
print('#{} {}'.format(i, min_day))
# format함수를 사용해서 테스트 케이스와 정답을 출력
else: # 제약사항에 해당되지 않을 경우
print('#{} -1'.format(i)) # Format함수를 사용해서 테스트 케이스와 오류 메세지를 출력
break # 탈출
# 이 문제에서 고려해야 할 점은 두 번째 날에서 첫 번째날을 빼서 그 값을 구해야 하는데
# 그냥 빼서 구하기에는 입력 받은 값이 월과 일을 받았고 각 달마다 일 수도 다르다.
# 제약사항에 따라서 값을 찾을 경우 이 차를 쉽게 구하는 방법은 1월 1일부터 입력 받은 첫 번째 달 - 1에
# 첫 번째 일 수를 더한 값과 1월 1일부터 두 번째 달 - 1에 두 번째 일 수를 더한 값를 각각 구한 뒤
# 이 둘의 차를 구하고 +1을 해주면 두 날짜의 차가 구해진다는 점을 알고 문제에 접근하면 쉽게 풀 수 있다.