영벨롭 개발 일지

[백준 BOJ][C++]6064번 카잉 달력 풀이: 브루트 포스 본문

알고리즘 문제 풀이/BOJ

[백준 BOJ][C++]6064번 카잉 달력 풀이: 브루트 포스

영벨롭 2022. 3. 24. 17:05

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

 

6064번: 카잉 달력

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

www.acmicpc.net

 

 

 

[풀이 과정]

 

1. 멸망년도인 m과 n의 최소공배수를 구한다.

 

2. <x:y> 로 표현되는 해 i를 x값으로 초기화 한다. 

 

3. (i - 1)%n + 1 == y를 만족하는지 검사한다.

 

4. 최소공배수에 도달하거나 위 조건을 만족할 때까지 i 에 m 값을 더해 3~4 과정을 반복한다. 

 

5. i가 최소 공배수보다 크다면 유효하지 않은 해이고, 그렇지 않다면 i를 출력한다. 

 

 

#include<iostream>
#include<algorithm>

using namespace std;

int gcd(int a, int b) {
	
	if (a < b) {
		int temp = a;
		a = b;
		b = temp;
	}

	int r = a % b;

	while (r != 0) {
		a = b;
		b = r;
		r = a % b;
	}

	return b;
}

int lcm(int a, int b) {
	return a * b / gcd(a, b);
}

int main(void) {
	int t;
	int n, m, x, y;

	cin >> t;

	while (t > 0) {

		cin >> m >> n >> x >> y;

		int i;
		bool flag = false;
		int limit = lcm(m, n);

		for (i = x; i <= limit; i += m) {
			if ((i - 1) % n + 1 == y) {
				flag = true;
				break;
			}
		}

		if (flag) {
			cout << i << endl;
		}
		else {
			cout << -1 << endl;
		}

		t--;
	}
    
    return 0;
}
반응형