📖 문제
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
월 일로 이루어진 날짜를 2개 입력 받아, 두 번째 날짜가 첫 번째 날짜의 며칠째인지 출력하는 프로그램을 작성하라.
[제약 사항]
월은 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부터 시작한다.)
📖 풀이
각 달마다 dict을 지정해서 풀면 되는 문제.
주어진 달이 같은 경우와 아닌 경우를 나누어서 해결하면 된다.
예시로 주어진 테스트 케이스 (5/5 부터 8/15)을 예를 들면,
합 = 8월의 15일 + 7월의 31일 6월의 30일 + (5월의 31일 - 5월의 5일) + 1일
= 15 + 31 + 30 + 26 + 1 = 103이 된다.
T = int(input())
days = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
day_sum = 0
month1, day1, month2, day2 = map(int, input().split())
if month1 == month2: # 달이 같을 경우
day_sum += day2 - day1 + 1
else:
day_sum += day2
for i in range(month2 - 1, month1, -1): # for문을 거꾸로 해서 돈다
day_sum += days[i]
day_sum += days[month1] - day1 + 1
print("#{0} {1}".format(test_case, day_sum))