하나씩 알아가기

[BOJ_6064] 카잉 달력 본문

알고리즘

[BOJ_6064] 카잉 달력

clearwater 2021. 5. 3. 14:30
728x90
반응형

이 문제는 직관적으로 이해하기가 정멀 어렵습니다. 예시를 보면서 식을 세워 문제를 풀어야 합니다.

M=5, N=7, x=3, y=2 라고 하면 카잉달력의 총 날짜는 M*N = 35개(0~34)입니다.

시작점인 0에서 x를 더한 날짜가 최초날짜이고 최초날짜로부터 M번씩 간격을 두고 총 N번 날짜를 확인하면 됩니다.

이 N번 중 y 값이 일치하는 날짜가 몇 번째 인지를 찾는 것이 핵심입니다.

3+0부터 시작해서 3%7 = 3, (3+5)%7 = 1, (3+10)%7 = 6, (3+15)%7 = 4,  (3+20)%7 = 2

이것을 for 문으로 잘 구현해야 합니다.

다시 말하면, x를 이용해 모든 해를 고려하지 않고, i X M + x의 형태만 조사하면 됩니다.

#include<iostream>
using namespace std;
int main() {
	int t;
	cin >> t;
	while (t--) {
		int m, n, x, y;
		cin >> m >> n >> x >> y;
		x -= 1;
		y -= 1;
		bool ok = false;
		for (int i = x; i < (n * m); i+=m) {
			if (i % n == y) {
				cout << (i + 1) << '\n';
				ok = true;
				break;
			}
		}
		if (!ok) {
			cout << -1 << '\n';
		}
	}

	return 0;
}

 

6064번: 카잉 달력 (acmicpc.net)

 

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ_1107] 리모컨  (0) 2021.04.29
[BOJ_11052] 카드 구매하기  (0) 2021.02.14
[BOJ_7576] 토마토  (0) 2021.02.09
[BOJ_4963] 섬의 개수  (0) 2021.02.03
[BOJ_11724] 연결 요소의 개수  (0) 2021.02.03