์ต๋๊ณต์ฝ์
์๋ก ์์, ์ ์๋ค์ ๊ณต์ฝ์(common factor)๋ ๋์์ ๊ทธ๋ค ๋ชจ๋์ ์ฝ์์ธ ์ ์๋ค. ์ ์ด๋ ํ๋๊ฐ 0์ด ์๋ ์ ์๋ค์ ์ต๋๊ณต์ฝ์(greatest common factor, ์ฝ์ GCF)๋ ๊ณต์ฝ์ ๊ฐ์ด๋ฐ ๊ฐ์ฅ ํฐ ํ๋๋ค.
1. Brute Force๋ก ๊ตฌํ๊ธฐ
๋ ์์ค ์์ ์๋ฅผ ๊ณ ๋ฅด๊ณ 1๋ถํฐ ์์ ์๊น์ง ๋ชจ๋ ์๋ฅผ ์ํํ๋ฉด์ ๋ ์๋ฅผ ๋์์ ๋๋์ด ๋จ์ด์ง๊ฒ ํ๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๊ตฌํด ์ต๋๊ณต์ฝ์ ๊ฐ์ ์ป๋๋ค.
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
min_num = min(a,b)
for i in range(min_num, 0, -1):
if (a%i == 0 and b%i == 0):
answer = i
break
print("gcd : ", answer)
2. ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์๋ฆฌ
1. ๋ ์์ ์ ์ a, b์ ๋ํด (a > b) a๋ฅผ b๋ก ๋๋ ๋๋จธ์ง๋ฅผ r์ด๋ผ๊ณ ํ ๋, a์ b์ ์ต๋๊ณต์ฝ์๋ b์ r์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค.
2. ์ ๊ณผ์ ์ ๋๋จธ์ง๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
3. ๋ง์ง๋ง์ผ๋ก ๋๋๋ ์๋ก ์ฌ์ฉ๋ ๊ฐ์ด ์ต๋๊ณต์ฝ์์ด๋ค.
์์) a = 15, b = 10
1. 15 % 10 = 5
a = 10, b = 5
2. 10 % 5 = 0
-> ๋๋จธ์ง๊ฐ 0์ด๋ฏ๋ก ์ต๋๊ณต์ฝ์๋ "5"
a | b | r | |
์ด๊ธฐ | 15 | 10 | |
loop 1 | 15 | 10 | 5 |
loop 2 | 10 | 5 | 0 |
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
def _gcd(a, b):
while a % b != 0:
tmp = a%b
a = b
b = tmp
return b
print(_gcd(a,b))
์ต๋๊ณต์ฝ์
์๋ก ์์, ์ฌ๋ฌ ๊ฐ์ ์ ์/๋คํญ์/ํ์ ์์์ ๊ณต๋ฐฐ์(common multiple)๋ ๊ทธ๋ค ๋ชจ๋์ ๋ฐฐ์๊ฐ ๋๋ ์ ์/๋คํญ์/ํ์ ์์์ด๋ค. ์ต์๊ณต๋ฐฐ์(least common multiple/ lowest common multiple, ์ฝ์ LCM)๋ ์์ ๊ณต๋ฐฐ์ ๊ฐ์ด๋ฐ ๊ฐ์ฅ ์์ ํ๋์ด๋ค.
๊ณต์ ์ด์ฉํ๊ธฐ
LCM(a, b) = | a * b | / GCD(a, b)
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
def _gcd(a, b):
while a % b != 0:
tmp = a%b
a = b
b = tmp
return b
def _lcm(a,b):
return (abs(a*b) // gcd(a, b))
print(lcm(a, b))
'๐ค์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ด๋ถ ํ์ / ์ด์ง ํ์ (Binary Search) (0) | 2024.11.18 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ด๋ชจ์ค๋ฒ (Imos Method) (0) | 2024.11.01 |
[์๊ณ ๋ฆฌ์ฆ] - ๋ฐฐ๋ญ๋ฌธ์ (Knapsack Problem) (0) | 2024.09.03 |
[์๊ณ ๋ฆฌ์ฆ] ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (Prim's Algorithm) (0) | 2024.08.30 |
[์๊ณ ๋ฆฌ์ฆ] ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (Kruskal Algorithm) (0) | 2024.08.29 |