연도의 값을 1씩 증가시키면서 연도를 각각 15, 28, 19로 나누었을때의 나머지가 E, S, M이 나오는 경우 break문을 실행시켜 연도가 출력되게끔 코드를 작성했는데 시간초과가 발생했다.
import sys
E, S, M = map(int, sys.stdin.readline().split())
year = 1
while True:
if year % 15 == E and year % 28 == S and year % 19 == M:
break
year += 1
print(year)
(E=15, S=28, M=19의 경우 답을 출력하지 못했다.)
나머지 정리에 대한 개념을 이용해서 코드를 작성했다.
지구를 나타내는 수의 범위는
1 ≤ E ≤ 15
이므로 이를 나머지 정리를 이용해서 식을 세우면year = 15 × (몫) + E
가 된다.
따라서 이 식은(year - E) ÷ 15 = (몫)
이 된다.
몫이 자연수로 존재하게된다면 나누어 떨어진다는 의미가 되고 그렇게 되면 나머지는 0이므로 이를 이용해서 코드를 작성할 수 있었다.
나머지 변수 S, M 역시 위와 동일한 과정을 거치면 된다.
import sys
E, S, M = map(int, sys.stdin.readline().split())
year = 1
while True:
if (year - E) % 15 == 0 and (year - S) % 28 == 0 and (year - M) % 19 == 0:
break
year += 1
print(year)