백준6064(파이썬) - 카잉 달력
resilient
·2021. 7. 18. 12:11
728x90
반응형
https://www.acmicpc.net/problem/6064
- 이 문제를 읽고 처음 든 생각은 '반복문을 사용하고 규칙을 찾아서 구현해야겠다' 였다.
- 먼저 직관적으로 코드를 짰었는데 당연히 시간 초과가 났다. 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)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준]1068(파이썬) - 트리 (0) | 2021.07.20 |
---|---|
[백준]1058(파이썬) - 친구 (0) | 2021.07.19 |
백준1759(파이썬) - 암호만들기 (0) | 2021.07.16 |
백준10972(파이썬) - 다음 순열 (0) | 2021.07.15 |
백준14500(파이썬) - 테트로미노 (0) | 2021.07.14 |