PS

BOJ 2942 : 퍼거슨과 사과

lickelon 2024. 12. 15. 16:55
  • 문제 링크 : boj.kr/2942
  • 난이도 : S2
  • 태그 : 정수론

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

ll gcd(ll a, ll b)
{
    if (!b) return a;
    return gcd(b, a % b);
}

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

    int r, g;
    cin >> r >> g;
    int d = gcd(r, g);

    for(int i = 1; i <= d; i++) {
        if(d%i) continue;
        cout << i << " " << r/i << " " << g/i << "\n";
    }

    return 0;
}

풀이

r과 g의 gcd를 구한다. 그 gcd의 약수의 개수만큼의 경우로 나누어줄 수 있다.

728x90