๐Ÿ•๏ธ ICPC Sinchon/Basic Math

[BOJ][C++] ๋ฐฑ์ค€ 20003๋ฒˆ: ๊ฑฐ์Šค๋ฆ„๋ˆ์ด ์‹ซ์–ด์š”

์„ ๋‹ฌ 2023. 1. 24. 02:19
๋ฐ˜์‘ํ˜•

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

 

20003๋ฒˆ: ๊ฑฐ์Šค๋ฆ„๋ˆ์ด ์‹ซ์–ด์š”

ํ”„๋กœ๋ถˆํŽธ๋Ÿฌ ์ง€์ˆ˜๋Š” ๋”ฑ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์ˆ˜๋Š” ์งˆ์ƒ‰์ด๋‹ค. ๊ฑฐ์Šค๋ฆ„๋ˆ์ด ๋‚จ๋Š” ๊ฒƒ๋„ ๋”ฑ ์งˆ์ƒ‰์ด๋‹ค. ์ง€์ˆ˜๊ฐ€ ์•„์ดํ…œ์„ ์‚ฌ๋ ค ํ•˜๋Š”๋ฐ, ์•„์ดํ…œ์˜ ๊ฐ€๊ฒฉ์€ ๋‹ค ๋ถ„์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ง€๊ธˆ์€ ๊ฐ€๋ น, 3/2์ฝ”์ธ์„ ์‚ฌ๋ ค

www.acmicpc.net

 

๋ฌธ์ œ

ํ”„๋กœ๋ถˆํŽธ๋Ÿฌ ์ง€์ˆ˜๋Š” ๋”ฑ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์ˆ˜๋Š” ์งˆ์ƒ‰์ด๋‹ค. ๊ฑฐ์Šค๋ฆ„๋ˆ์ด ๋‚จ๋Š” ๊ฒƒ๋„ ๋”ฑ ์งˆ์ƒ‰์ด๋‹ค. ์ง€์ˆ˜๊ฐ€ ์•„์ดํ…œ์„ ์‚ฌ๋ ค ํ•˜๋Š”๋ฐ, ์•„์ดํ…œ์˜ ๊ฐ€๊ฒฉ์€ ๋‹ค ๋ถ„์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ง€๊ธˆ์€ ๊ฐ€๋ น, 3/2์ฝ”์ธ์„ ์‚ฌ๋ ค๊ณ  2์ฝ”์ธ์„ ์ ๋ฆฝํ•˜๊ณ  ๊ฒฐ์ œํ•˜๋ฉด 1/2์ฝ”์ธ์ด ๋‚จ์•„๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์‚ฌ์—๊ฒŒ ๋ชจ๋“  ์•„์ดํ…œ์„ ๋”ฑ ๋–จ์–ด์ง€๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๊ฒฉ ๋‹จ์œ„๋ฅผ ๊ฑด์˜ํ•˜๊ธฐ ์œ„ํ•ด, ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ ๋‹จ์œ„๋Š” ์ตœ๋Œ€ ๋ช‡ ์ฝ”์ธ์ธ์ง€๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

N๊ฐœ์˜ ์ข…๋ฅ˜์˜ ์•„์ดํ…œ์„ ๋”ฑ ๋–จ์–ด์ง€๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ์ฝ”์ธ ๋‹จ์œ„๋ฅผ ๊ตฌํ•˜๋ผ. ์ด๋•Œ ์•„์ดํ…œ๊ณผ ์ฝ”์ธ์€ ๋ชจ๋‘ ๋ถ„์ˆ˜ ํ˜•ํƒœ๋กœ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์•„์ดํ…œ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 50)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•œ ์ค„์— ๋ถ„์ž A, ๋ถ„๋ชจ B (1 ≤ A, B ≤ 40) ์Œ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” ๊ธฐ์•ฝ๋ถ„์ˆ˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ƒˆ๋กœ์šด ์ฝ”์ธ ๋‹จ์œ„์˜ ๋ถ„์ž, ๋ถ„๋ชจ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ๊ธฐ์•ฝ๋ถ„์ˆ˜ ํ˜•ํƒœ์ด๋‹ค.

 

 

ํ’€์ด

1. ๊ฐ ๋ถ„์ˆ˜๋“ค์„ ๋ถ„๋ชจ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋กœ ํ†ต๋ถ„

2. ๋ถ„์ž๋“ค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋‹ต ๋ถ„์ˆ˜ ๊ตฌํ•˜๊ธฐ

3. ๋‹ต๋ถ„์ˆ˜ ์•ฝ๋ถ„

#include <iostream>
#include <vector>

using namespace std;

typedef long long ll;
typedef pair<ll, ll> ci;

ll getGcd(ll a, ll b) {
    ll tmp;
    while(b>0) {
        tmp = a%b;
        a = b;
        b = tmp;
    }
    return a;
}

ll getLcm(ll a, ll b) {
    return a / getGcd(a, b) * b;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    int n, a, b;
    ll gcd, lcm=1;
    cin >> n;
    vector<ci> v(n);
    for(int i=0; i<n; i++) {
        cin >> a >> b;
        lcm = getLcm(b, lcm);
        v[i] = {a,b};
    }
    
    // ํ†ต๋ถ„ํ•˜์—ฌ ๋‹ค์‹œ ๋„ฃ์–ด์ฃผ๊ธฐ
    ll boonmo = lcm;
    for(int i=0; i<n; i++)
        v[i] = {lcm / v[i].second * v[i].first, boonmo};

    
    // ๋ถ„์ž๋“ค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•ด์ฃผ๊ธฐ
    ll boonja = v[0].first;
    for(int i=1; i<n; i++)
        boonja = getGcd(boonja, v[i].first);

    
    // ์•ฝ๋ถ„ํ•˜๊ธฐ
    gcd = getGcd(boonmo, boonja);
    boonja /= gcd;
    boonmo /= gcd;
    cout << boonja << " " << boonmo;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•