[BaekJoon 2609][๐ŸŸค1] ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

Date :   Updated :

โ“ ๋ฌธ์ œ

๋ฐฑ์ค€ 2609 - โ€œ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜โ€

๐ŸŽฏ ๋‚œ์ด๋„

Bronze ๐ŸŸค1

๐Ÿง  ํ’€์ด

1. ๋‚ด ํ’€์ด (์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • GCD, LCM, Euclidean algorithm

- ์„ค๋ช…

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ํ™œ์šฉํ•ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์‚ฌ์‹ค ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ  ์ž์ฃผ ์“ฐ์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ผ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฑํžˆ ํŠน๋ณ„ํ•  ๊ฒƒ์€ ์—†๋‹ค. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ฐพ์œผ๋ฉด, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log N)์ด๋‹ค.

- ์ฝ”๋“œ

๋‚ด ํ’€์ด ์ฝ”๋“œ
#include <iostream>


using namespace std;

int GCD(int iNum1, int iNum2);
int LCM(int iNum1, int iNum2, int iGCD);

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

    int iMin{}, iMax{};
    cin >> iMin >> iMax;

    int iGCD{};
    iGCD = GCD(iMin, iMax);

    cout << iGCD << "\n" << LCM(iMin, iMax, iGCD);

    return 0;
}

// ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์‚ฌ์šฉํ•œ GCD ๊ตฌํ•˜๊ธฐ
int GCD(int iNum1, int iNum2)
{
    if(iNum2 == 0) return iNum1;
    return GCD(iNum2, iNum1 % iNum2);
}

// LCM์€ ๋‘ ์ˆซ์ž๋ฅผ ๊ณฑํ•˜๊ณ  GCD๋กœ ๋‚˜๋ˆ ์ฃผ๋ฉด ๋‚˜์˜จ๋‹ค
int LCM(int iNum1, int iNum2, int iGCD)
{
    return iNum1 * iNum2 / iGCD;
}

๐Ÿ’ญ ํ›„๊ธฐ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ผ ํ•œ ๋ฒˆ ๋˜์งš์–ด๋ณด๊ณ ์ž ํฌ์ŠคํŒ…์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์€ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋งŽ์ด ์“ฐ์ด๊ธฐ๋„ ํ•˜๊ณ , ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋˜ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ฐ™์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋งŒ ์•„๋‹ˆ๋ผ๋ฉด O(log N)๋ฅผ ๋ณด์žฅํ•˜๋‹ˆ ์ž˜ ๊ธฐ์–ตํ•ด๋‘๋„๋ก ํ•˜์ž.

๐Ÿ”— ์ฐธ๊ณ ์ž๋ฃŒ

Comments