카잉 달력
1. 조건
- T : 테스트 케이스 : 해를 나타냄
- 1 <= x <= M, 1 <= y <= M,
- : 마지막 해
- <x' : y'> : 그 다음 해
- x < M이면 x' = x + 1,아니라면 x' = 1
- y < N이면 y' = y + 1,아니라면 y' = 1
2. 출력
- 주어진 가 몇 번째 해인지 출력
- 만약 유효하지 않다면 -1을 출력
3. 방식
- 조건에 따라 까지 다 반복하는 브루트포스의 형태를 사용
- 최소공배수, 최대공약수를 사용
- 각각 M, N을 나눈 것이 x, y라는 나머지라는 규칙을 찾아 해결
4. 코드
import math
def Cnt(all):
if M > N:
i = x
gap = M
else:
i = y
gap = N
while i <= all:
if (i - x) % M == 0 and (i - y) % N == 0:
return i
else:
i += gap
return -1
for t in range(int(input())):
M, N, x, y = map(int, input().split())
all = math.lcm(M, N)
print(Cnt(all))
- 중국인의 나머지 정리를 통해 어떠한 해가 있다라고 생각하고 넘어갔다.