공부 기록장
[백준 - Python] 6064. 카잉 달력 (완전 탐색) 본문
https://www.acmicpc.net/problem/6064
코드
import sys
input = sys.stdin.readline
T = int(input())
def num(M, N, x, y):
k = x
while k <= M * N:
if (k - y) % N == 0:
return k
k += M
return -1
for _ in range(T):
M, N, x, y = map(int, input().split())
print(num(M, N, x, y))
k를 1씩 늘리면서 완전 탐색을 진행하면 시간초과가 발생한다.
따라서 이 방법 이외로 k값을 찾을 수 있는 간편한 식을 구하는게 문제 풀이의 관건이었다.
k, 즉 <x, y>가 몇 번째 해인지를 알려주는 숫자는
(k-x) % m = 0 혹은
(k-y) % n = 0을 만족시키는 어떤 수이다.
즉, (k-x)가 m의 배수인 수를 찾거나, (k-y)가 n의 배수인 수를 찾고
나머지 식도 만족하는지 확인하면 된다.
k를 x 혹은 y 하나로 초기화 해두고
M 혹은 N을 더해주면서 배수 단위로 늘려주고,
나머지 식을 만족하는 지 확인하여
두 식 모두 만족하는 K를 구했다.
참고 자료
'코딩 테스트 > 백준 문제 풀이' 카테고리의 다른 글
[백준 - Python] 2775. 부녀회장이 될테야 (DP) (0) | 2024.02.10 |
---|---|
[백준 - Python] 9663. N-Queen (완전 탐색) (0) | 2024.02.09 |
[백준 - Python] 10971. 외판원 순회 2 (완전 탐색) (0) | 2024.02.05 |
[백준 - Python] 14888. 연산자 끼워넣기 (완전 탐색) (0) | 2024.02.02 |
[백준 - Python] 1759. 암호 만들기 (완전 탐색) (1) | 2024.02.02 |