※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 17586번 문제인 Diagonal Cut이다.
문제는 아래 링크를 확인하자.

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

 

정사각형을 이등분하는 직선은 항상 그 정사각형의 중심을 지나야하므로, 주어진 초콜릿블록을 지나는 대각선이 지나는 칸 중, 정가운데를 지나는 칸의 개수를 세는 것으로 문제를 해결할 수 있다.

 

주어지는 대각선은 두 변의 최대공약수 횟수만큼 같은 규칙으로 칸을 지나고, 서로소인 두 정수를 변의 길이로 갖는 직사각형에서 대각선이 어떤 칸의 정중앙을 지나려면 두 변의 길이가 모두 홀수여야 함을 관찰해 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

ll gcd(ll x, ll y) {
	if (y) return gcd(y, x % y);
	return x;
}	
ll A, B, G;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> A >> B;
	G = gcd(A, B);
	A /= G, B /= G;
	if ((A & 1) && (B & 1)) cout << G;
	else cout << 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 25989 // C++] Jabbing Jets  (0) 2024.08.20
[BOJ 25984 // C++] Extended Braille  (0) 2024.08.19
[BOJ 17500 // C++] 국경  (0) 2024.08.17
[BOJ 29779 // C++] Colliding Encoding  (0) 2024.08.16
[BOJ 19276 // C++] Magic Trick  (0) 2024.08.15

+ Recent posts