๐Ÿ“• Algorithm/Solved

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žก์Šค] GCD LCM(์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜) (C++, ์™„์ „ ํƒ์ƒ‰)

ํ•œ์ฝ”๋”ฉ 2020. 7. 9. 11:19
728x90
728x90

๋ฌธ์ œ

๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(LCM)๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ๋‘˜์€ 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋ฉฐ ์‚ฌ์ด์— ํ•œ ์นธ์˜ ๊ณต๋ฐฑ์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ, ๋‘˜์งธ ์ค„์—๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 


#include <iostream>

using namespace std;

int gcd(int a, int b) {
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

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

int main() {

	int a, b;
	cin >> a >> b;

	cout << gcd(a, b) << endl;
	cout << lcm(a, b);
}

๋‘ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(LCM)์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋„ˆ๋ฌด ํ”ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด ์ด๋ฒˆ ๊ธฐํšŒ์— ์ฝ”๋“œ๋ฅผ ๊ผญ ๊ผผ๊ผผํ•˜๊ฒŒ ๋ด์„œ ๋กœ์ง์„ ์ดํ•ดํ•˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. 

 

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ๋‘ ์ˆ˜์˜ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜๋Š” ์ € ๋ฐฉ์‹์„ ์ผ๋ช… '์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•'์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• (์ถœ์ฒ˜)

 

  1. ์ž…๋ ฅ์œผ๋กœ ๋‘ ์ˆ˜ m,n(m>n)์ด ๋“ค์–ด์˜จ๋‹ค.
  2. n์ด 0์ด๋ผ๋ฉด, m์„ ์ถœ๋ ฅํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•œ๋‹ค.
  3. m์ด n์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, n์„ ์ถœ๋ ฅํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•œ๋‹ค.
  4. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, m์„ n์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ƒˆ๋กญ๊ฒŒ m์— ๋Œ€์ž…ํ•˜๊ณ , m๊ณผ n์„ ๋ฐ”๊พธ๊ณ  3๋ฒˆ์œผ๋กœ ๋Œ์•„์˜จ๋‹ค.

์œ„ ๊ณผ์ •์€ โ€œn, m์— ๋Œ€ํ•ด์„œ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‹ค์‹œํ•  ์ˆ˜ ์žˆ๋‹คโ€๋ผ๋Š” ์กฐ๊ฑด์—๋งŒ ์˜์กดํ•˜๋ฏ€๋กœ, ์ •์ˆ˜ํ™˜๋ฟ ์•„๋‹ˆ๋ผ, ์ž„์˜์˜ ์œ ํด๋ฆฌ๋“œ ์ •์—ญ์— ๋Œ€ํ•ด๋„ ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ๊ณต์•ฝ์ธ์ž๊ฐ€ ๊ตฌํ•ด์ง„๋‹ค. 

 

int gcd(int a, int b) {
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

 

 

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์•ž์„œ ๊ตฌํ•œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋‹ค์Œ์— ๊ตฌํ˜„ํ•  ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

 

728x90
๋ฐ˜์‘ํ˜•