Question
문제링크
Silver 4
Logic
기본 구조 : lcm
1. 요일 리스트를 생성한다.
2. 입력된 시간 정보들을 계산하기 쉽게 분 단위로 계산해놓는다.
3. 두 값의 최소 공배수를 상한선으로 두고,
4. 두 수를 비교해 작은 수에게 그 별의 주기만큼 시간을 더한다.
5-1. 중간에 두 값이 같아지면, 그 값을 반대로 날짜와 시간으로 계산하여 출력한다.
5-2. 반복 상한선까지 값이 안나오면, 답이 존재하지 않는 것이므로 'Never'를 출력한다.
Code
from sys import stdin
from math import lcm
weekday = ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
fsh,fsm = map(int,stdin.readline().rstrip().split(':'))
ssh,ssm = map(int,stdin.readline().rstrip().split(':'))
fh,fm = map(int,stdin.readline().rstrip().split(':'))
sh,sm = map(int,stdin.readline().rstrip().split(':'))
f_start_time = fsh*60+fsm
s_start_time = ssh*60+ssm
f_duration = fh*60+fm
s_duration = sh*60+sm
llcm = lcm(f_duration,s_duration)
cnt=0
for i in range(llcm):
cnt+=1
if f_start_time == s_start_time :
break
if f_start_time < s_start_time : f_start_time += f_duration
else : s_start_time += s_duration
if cnt==llcm :
print('Never')
else:
print(weekday[(f_start_time//1440)%7])
f_start_time %= 1440
hh = str(f_start_time//60)
mm = str(f_start_time%60)
print('0'*(2-len(hh)) + hh+':'+'0'*(2-len(mm)) +mm)