백준 / 별관찰 / 2859

박성완·2022년 4월 26일
0

백준

목록 보기
74/78
post-thumbnail

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)

0개의 댓글