https://www.acmicpc.net/problem/6064
6064번: 카잉 달력
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.
www.acmicpc.net
풀이
1. 정답%M=x, 정답%N=y 라는 규칙을 활용한다.
2. 찾아야 하는 x, y는 정해졌기 때문에 x 또는 y 중 하나를 고정하고 모듈러 연산을 했을 때 x, y모두 일치하는 정답을 찾으면 된다.
M=3, N=4 일 때 <1, 2>를 찾고자 한다. x를 고정시키면 답이 될 수 있는 후보는 1, 1+M, 1+2M... 이다. 후보를 갱신할 때마다 (1+kM) % N = 2 인지 확인하면 된다.
참고로 마지막 열의 경우 모듈러 연산이 0이기 때문에 y를 0으로 바꿔준다.
리뷰
모듈러 연산을 잘 활용하자...!
#include <iostream>
using namespace std;
/* M=3, N=4
<1,1> <2,2> <3,3> <1,4>
<2,1> <3,2> <1,3> <2,4>
<3,1> <1,2> <2,3> <3,4>
*/
int T, M, N, x, y;
int m, n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
// freopen("input.txt", "r", stdin);
cin >> T;
for (int i=0; i<T; i++){
cin >> M >> N >> x >> y;
// res%M = x, res%N = y
int res=x; // x 고정
y %= N; // y가 N과 같을 때 0으로 만들기
while ((res <= M*N) && res%N != y)
{
// 정답 후보는 M씩 증가하면서(x고정) y 확인
res += M;
}
if (res > M*N) cout << -1 << endl;
else cout << res << endl;
}
return 0;
}
'백준' 카테고리의 다른 글
[C++] 백준 14500번 테트로미노 (0) | 2023.01.31 |
---|---|
[C++] 백준 7569번 토마토 (0) | 2023.01.28 |
[C++] 백준 5525번 IOIOI (0) | 2023.01.28 |
[C++] 백준 1992번 쿼드트리 (0) | 2023.01.27 |
[C++] 백준 1780 종이의 개수 (0) | 2023.01.27 |