πŸ“• 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
λ°˜μ‘ν˜•