백준6064(파이썬) - 카잉 달력

resilient

·

2021. 7. 18. 12:11

728x90
반응형

https://www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

  • 이 문제를 읽고 처음 든 생각은 '반복문을 사용하고 규칙을 찾아서 구현해야겠다' 였다.
  • 먼저 직관적으로 코드를 짰었는데 당연히 시간 초과가 났다. while문으로 m,n에 1씩 더하면서 비교해주는 구현이였는데 m,n의 범위가 40000까지여서 시간초과가 당연히 발생할 수 밖에 없었다.
  • 그래서 생각한게 앞에 m만 알면 n을 구할 수 있지 않을까 였다.
  • ans 라는 변수를 -1로 초기화 한 후, while문으로 (x-y) 이 n으로 나누어 떨어질 때 x 값을 ans 라고 생각했고, 만약에 나누어 떨어지지 않으면, x에 m만큼 더해줘서 m만큼 한 바퀴씩 돌려준다. 굳이 1씩 더해주지 않고도 구현할 수 있는 방법이다.
import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t):
    m,n,x,y = map(int,input().split())
    ans = -1
    while x <= m*n:
        if (x-y) % n == 0:
            ans = x
            break
        x += m
    print(ans)   

    ######################################시간초과
    # while True:
    #     cnt += 1
    #     if _m % m == x and _n % n == y:
    #         print(cnt)
    #         break
    #     elif _m % m == 0 and _n % n == 0:
    #         print(-1)
    #         break
    #     _m += 1
    #     _n += 1
    # print(cnt)
반응형