728x90
728x90

문제

월 일로 이루어진 날짜를 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부터 시작한다.)

 

예제

[입력] [출력]

3 1 3 31
5 5 8 15
7 17 12 24  
#1 31
#2 103
#3 161

 

문제 해결 방법

  • 각 월별 날짜 수를 딕셔너리 객체(@date_dict@)에 넣는다.
date_dict = { 1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31 }

 

  • 첫 번째 날짜(@M1@ @D1@)를 올해 1월 1일 기준 몇 번째 날짜인지 계산한다.
    • @1@월부터 @M1 - 1@월까지의 모든 날짜 수들을 더해준 후, 추가적으로 입력 받은 @D1@을 합해줌으로써 구할 수 있다.
# 첫 번째 날짜에서 총 일수 구하기
origin_total_date = 0

for month in range(1, M1):
    origin_total_date += date_dict[month]

origin_total_date += D1

 

  • 두 번째 날짜(@M2@ @D2@)를 올해 1월 1일 기준 몇 번째 날짜인지 계산한다.
    • @1@월부터 @M1 - 1@월까지의 모든 날짜 수들을 더해준 후, 추가적으로 입력 받은 @D2@를 합해줌으로써 구할 수 있다.
# 두 번째 날짜에서 총 일수 구하기
target_total_date = 0

for month in range(1, M2):
    target_total_date += date_dict[month]

target_total_date += D2

 

  • 정답을 구한 후 출력시켜준다.
# 정답 구하기 (첫 번째 날짜 총 일수 - 두 번째 날짜 총 일수)
answer = target_total_date - origin_total_date + 1

print(f"#{test_case} {answer}")

 

코드

T = int(input())

for test_case in range(1, 1 + T):
    M1, D1, M2, D2 = map(int, input().split())

    # 1월 : 31일 / 2월 : 28일 / 3월 : 31일 / 4월 : 30일
    # 5월 : 31일 / 6월 : 30일 / 7월 : 31일 / 8월 : 31일
    # 9월 : 30일 / 10월 : 31일 / 11월 : 30일 / 12월 : 31일
    date_dict = { 1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31 }
    
    # 첫 번째 날짜에서 총 일수 구하기
    origin_total_date = 0

    for month in range(1, M1):
        origin_total_date += date_dict[month]
    
    origin_total_date += D1

    # 두 번째 날짜에서 총 일수 구하기
    target_total_date = 0

    for month in range(1, M2):
        target_total_date += date_dict[month]
    
    target_total_date += D2

    # 정답 구하기 (첫 번째 날짜 총 일수 - 두 번째 날짜 총 일수)
    answer = target_total_date - origin_total_date + 1

    print(f"#{test_case} {answer}")

 

참고

  • 난이도: D2
728x90
728x90