[백준] 1476번 날짜 계산

거북이·2023년 1월 3일
1

백준[실버5]

목록 보기
28/114
post-thumbnail

💡문제접근1

연도의 값을 1씩 증가시키면서 연도를 각각 15, 28, 19로 나누었을때의 나머지가 E, S, M이 나오는 경우 break문을 실행시켜 연도가 출력되게끔 코드를 작성했는데 시간초과가 발생했다.

💡코드1

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)

📌코드1 실행 결과 : 시간초과

(E=15, S=28, M=19의 경우 답을 출력하지 못했다.)

💡문제접근2

나머지 정리에 대한 개념을 이용해서 코드를 작성했다.

지구를 나타내는 수의 범위는 1 ≤ E ≤ 15이므로 이를 나머지 정리를 이용해서 식을 세우면 year = 15 × (몫) + E가 된다.
따라서 이 식은 (year - E) ÷ 15 = (몫)이 된다.

몫이 자연수로 존재하게된다면 나누어 떨어진다는 의미가 되고 그렇게 되면 나머지는 0이므로 이를 이용해서 코드를 작성할 수 있었다.

나머지 변수 S, M 역시 위와 동일한 과정을 거치면 된다.

💡코드2(메모리 : 30616KB, 시간 : 36ms)

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)

💡소요시간 : 1h 10m

0개의 댓글