본문 바로가기
알고리즘

[알고리즘 문제] 기념일 (Python / 파이썬)

by yewonnie 2022. 5. 17.

문제

유니는 소문난 사랑꾼이다.
유니는 오늘 동기들과 만나서 수다를 떨다가 올해 만난 애인을 자랑했다. 그런데 갑자기 한 동기가 며칠 사귀었냐고 물어었다. 유니는 사귄 날짜만 생각이 나고 며칠째인지 기억나지 않았다. 유니가 사랑꾼의 명성을 잃지 않도록 사귄 날짜로부터 오늘 며칠째인지 구하는 프로그램을 작성하시오.
올해는 1월부터 12월까지 각각 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일로 구성되어 있다.

입력

첫째 줄에 테스트케이스의 수 T가 주어진다..
각 테스트케이스의 첫 줄에 유니가 사귄 월, 일과 오늘의 월, 일이 공백으로 구분되어 주어진다.
( 1 ≤ T ≤ 100 )

출력

각 테스트케이스마다 '#'과 테스트케이스의 번호, 공백을 출력한 뒤 유니가 애인과 며칠 됐는지 출력한다.

문제 풀이 

유니가 사귄 월, 일과 오늘의 월, 일이 주어질 때 애인과 며칠 됐는지 계산하는 문제입니다.

문제를 더 쉽게 해결하기 위해 월, 일의 두 단위를 일 하나로 통일시켜주었습니다.

1월 1일 -> 1일

1월 2일 -> 2일

.

1월 31일 -> 31일 

2월 2일 -> 32일

이렇게 일로 단위를 통일 시켜 주면 5월 5일의 일은 어떻게 구할 수 있을까요?

1월, 2월, 3월, 4월의 일 수를 모두 더한 뒤 5일만 더해주면 일을 구할 수 있습니다.

즉, 5월 5일의 일은 31 + 28 + 31 + 30 + 5 = 125일 입니다.

 

따라서 오늘의 월, 일을 일 단위로 바꿔 계산해주고 

사귄 월, 일을 일 단위로 바꿔 계산해준 뒤 

두 일의 차이를 계산해주면 사귄지 며칠 됐는지 계산할 수 있습니다.

이때, 사귄 당일이 1일이므로 1을 더해주어야 합니다. 


My Code

# 1~12월 까지 각각의 일 수 
date = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

for tc in range(int(input())):
    # 사귄 월, 일 오늘의 월, 일
    f_m, f_d, t_m, t_d = map(int,input().split())

    # 사귄 일에 사귄 월 이전 월들의 일 수를 모두 더해줌 
    for i in range(f_m):
        f_d += date[i]

    # 오늘 일에 오늘 월 이전 월들의 일 수를 모두 더해줌
    for i in range(t_m):
        t_d += date[i]    
    
    # 두 일 수의 차를 출력 (사귄 날이 1일이므로 1 더해줌)
    print('#' + str(tc + 1), end = ' ')
    print(t_d - f_d + 1)

댓글