๋ฌธ์
๋ ๊ฐ์ ์์ฐ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ต๋ ๊ณต์ฝ์์ ์ต์ ๊ณต๋ฐฐ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ๋ ๊ฐ์ ์์ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ๋์ 10,000์ดํ์ ์์ฐ์์ด๋ฉฐ ์ฌ์ด์ ํ ์นธ์ ๊ณต๋ฐฑ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์์ ์ต๋๊ณต์ฝ์๋ฅผ, ๋์งธ ์ค์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์์ ์ต์ ๊ณต๋ฐฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 128 MB | 101506 | 58454 | 47498 | 57.836% |
https://www.acmicpc.net/problem/2609
ํ์ด
์ต๋๊ณต์ฝ์ ์๊ณ ๋ฆฌ์ฆ (GCD)
Greatest Common Divisor ๋ ๊ฐ์ฅ ํฐ ๊ณตํต๋ ์ฝ์๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ต๋๊ณต์ฝ์ ๋ฌธ์ ๋ฅผ ํ๋
"A์ B ๋ ์๊ฐ ์ฃผ์ด์ง๋ฉด A์ ์ฝ์๋ค์ ๋ชจ๋ ๊ตฌํ๊ณ , B์ ์ฝ์๋ค์ ๋ชจ๋ ๊ตฌํ ๋ค ๊ณตํต ๋ ์ฝ์๋ค๋ง ์ฐพ์๋ด์ด ์ฝ์๋ค์ ๊ณฑ์ผ๋ก ๋ค์ ๋ํ๋ด์ค๋ค."
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด์๋ค. ํ์ง๋ง ์ธ์๋ถํด ํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ๋ค๊ณ , ๋์๋ฅผ ๋น๊ตํ์ฌ ๊ณฑํด์ฃผ๋๋ฐ ์๊ฐ์ ์๋นํ๊ฒ ๋๋ค.
์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ธฐ ์ํด์๋ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(ไบ้คๆณ) ์ ์ดํดํด์ผํ๋ค.
๋ ์ a, b ∈ โค ์ด๊ณ , r = a mod b ์ด๋ผ๊ณ ํ๋ค. (r ์ a์ b๋ฅผ ๋๋ ๋๋จธ์ง๋ฅผ ์๋ฏธ)
์ด ๋ r์ (0 ≤ r < b) ์ด๊ณ , a ≥ b ์ด๋ค.
์ด ๋ a ์ b์ ์ต๋๊ณต์ฝ์๋ฅผ (a, b)๋ผ๊ณ ํ ๋ (a, b)์ ์ต๋๊ณต์ฝ์๋ (b, r)์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค.
์ฆ, GCD(a, b) = GCD(b, r)
์๋ฅผ๋ค์ด 146๊ณผ 64๊ฐ ์ฃผ์ด์ก๋ค๊ณ ์๊ฐํด๋ณด์.
- **GCD(146, 64) = GCD(64, 18) = GCD(18, 10) = GCD(10, 8) = GCD(8, 2) = GCD(2, 0) = 2
์ด๋ ๊ฒ ๊ตฌํด์ง๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต๋๊ณต์ฝ์ 2๊ฐ ๊ตฌํด์ง๋ค.
์ด๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ
- ์ฌ๊ท๋ฅผ ์ฌ์ฉ
์ต์๊ณต๋ฐฐ์ ์๊ณ ๋ฆฌ์ฆ(LCM)
Least Common Multiple / Lowest Common Multiple ์ ์ต์๊ณต๋ฐฐ์, ์ฆ ๊ณต๋ฐฐ์ ์ค ์ต์์ธ ์๋ฅผ ์ฐพ๋๊ฒ์ด๋ค. ์ต์๊ณต๋ฐฐ์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค.
a์ b์ ์ต์๊ณต๋ฐฐ์๋ a์ b์ ๊ณฑ์ a์ b์ ์ต๋๊ณต์ฝ์๋ก ๋๋๊ฒ๊ณผ ๊ฐ๋ค.
์ฆ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ค.
- ๋์์ ๊ณฑ๊ณผ ๊ตฌํด์ง ์ต๋๊ณต์ฝ์๋ฅผ ๋๋ ์ค๋ค.
์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ณผ์ ์ ๋์ ํด์ ์์๋ฅผ ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๊ณ์ฐ๊ณผ์
- a ์ b์ ๊ณฑ์ ๊ตฌํ๋ค. a = 24, b=18 a x b = 432
- a ์ b์ ๊ณฑ๊ณผ a์ b์ ์ต๋๊ณต์ฝ์๋ฅผ ๋๋ ์ค๋ค. 432 / 6 = 72
- ์ต์๊ณต๋ฐฐ์๋ 72
์ฝ๋
๋๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
BufferedReader + ๋ฐ๋ณต๋ฌธ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int d = gcd(a, b);
System.out.println(d);
System.out.println(a * b / d);
}
// ์ต๋๊ณต์ฝ์ ๋ฐ๋ณต๋ฌธ ๋ฐฉ์
public static int gcd(int a, int b) {
while (b != 0) {
int r = a % b; // ๋๋จธ์ง๋ฅผ ๊ตฌํด์ค๋ค.
// GCD(a, b) = GCD(b, r)์ด๋ฏ๋ก ๋ณํํ๋ค.
a = b;
b = r;
}
return a;
}
}
BufferedReader + ์ฌ๊ท
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ์ต๋๊ณต์ฝ์์์ต์๊ณต๋ฐฐ์ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = br.readLine().split(" ");
int a = Integer.parseInt(arr[0]);
int b = Integer.parseInt(arr[1]);
//์ต๋๊ณต์ฝ์(gcd)
int gcd = gcd(a, b);
//์ต์๊ณต๋ฐฐ์(lcm)
int lcm = lcm(a,b,gcd);
System.out.println(gcd);
System.out.println(lcm);
br.close();
}
static int gcd(int a, int b){ //์ต๋๊ณต์ฝ์ ๊ตฌํ๊ธฐ
if(b == 0){
return a;
}
//gcd(a,b) = gcd(b,r) ์ด๋ฏ๋ก.
return gcd(b, a % b);
}
static int lcm(int a, int b, int gcd){
int result = a*b;
return result / gcd;
}
}