흰 스타렉스에서 내가 내리지

[BOJ] (MATH) 6064번 카잉 달력 ★ 본문

Problem Solving

[BOJ] (MATH) 6064번 카잉 달력 ★

주씨. 2022. 1. 30. 10:59
728x90

 

 

알아둬야 할 스킬이 두가지가 있었다.

M과 N으로 나누어 떨어지는 어떤 수를 구하고자 할 때,

for i in range(M*N): if i%M==0 and i%N==0: ...

을 할게 아니라,

for i in range(0, M*N, M): if i%N==0:...

이렇게 하면 연산량을 크게 줄일수 있다는 것

 

그리고 가장 중요한 스킬

내가 원하는 결과

x f(x)
1 1
2 2
3 3
4 4
5 5
6 1
7 2

 

f(x) = x%5 를 하면 f(5)=0이 된다. 

x f(x) = x%5
1 1
2 2
3 3
4 4
5 0
6 1
7 2

 

x 대신 x-1을 함수에 넣고, 리턴 된 값을 1 더해주면 내가 원하는 결과를 얻을 수 있다. 

x x-1 (x-1)%5 (x-1)%5 + 1 
1 0 0 1
2 1 1 2
3 2 2 3
4 3 3 4
5 4 4 5
6 5 0 1
7 6 1 2

 

for _ in range(int(input())):
    M, N, x, y = map(int, input().split())
    found = False
    x-=1; y-=1;
    
    for i in range(x, M*N+1, M):
        if i%N == y:
            print(i+1)
            found = True
            break
            
    if not found:
        print(-1)