2609 JAVA ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์
ํ๊ต 1์ฃผ์ฐจ ์์ ์๊ฐ์์ ๋ฐฐ์ ๋ recursion์ ๊ดํ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์ด๋ค. while๋ฌธ์ ์ฌ์ฉํด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ์ฌ๊ท๋ฅผ ๋ณต์ตํ๊ธฐ ์ํด์ recursion์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณธ๋ค.
์ต๋ ๊ณต์ฝ์ : ๋ ์์ฐ์์ ์ต๋์ ์ฝ์, ๋๋ ์ ์ค์์ ๋ ์๊ฐ ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ ์ต๋์ ๊ณตํต ์์ฐ์๋ฅผ ์ผ์ปซ๋๋ค.
์ต์๊ณต๋ฐฐ์ : ๋ ์์ฐ์์ ์ต์์ ๋ฐฐ์, ๋ ์์ ๋ฐฐ์ ์ค์์ ๊ณตํต์ ์ด๋ฉด์ ์ต์์ ์์ฐ์๋ฅผ ์ผ์ปซ๋๋ค.
์ต์ ๊ณต๋ฐฐ์๋ ๋ ์๋ฅผ ๊ณฑํ ๊ฒ ์ค์์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๋๋๋ฉด ๊ฐ์ด ๋์จ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ๋ฌธ์ ์์ ์ค์ํ ๊ฒ์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.
์ต๋ ๊ณต์ฝ์๋ ๋ ์๋ฅผ ๋๋ ๋๋จธ์ง๋ฅผ ๋๋ ๋๋จธ์ง๋ฅผ ๋๋ ๋๋จธ์ง์ ๊ฐ์ ํ์์ผ๋ก ๋๋๋ ๊ฐ์ด 0์ด ๋๊ธฐ ์ด์ ๊น์ง ๊ณ์ฐํ์ฌ ๊ทธ ๋์ ๋ชซ์ ์ต๋ ๊ณต์ฝ์๋ก ์ ํ๋ค.
์ฆ, ์ฝ๋๋ฅผ ํตํด ์ค๋ช ํ๋ฉด
// ์๊ฐ ๋ณต์ก๋ O(n) -> ์ค๋๊ฑธ๋ฆผ
while(b!=0){
int r = a%b; // a๋ฅผ b๋ก ๋๋ ๊ฐ
r = b; // r์ b ์์น๋ก
b = a; // b๋ a ์์น๋ก
}
์๊ฐ ๋ณต์ก๋๊ฐ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int GCD(int a, int b) {
if(b == 0) return a; // while ๋ฌธ ์ฒ๋ผ b๊ฐ 0์ด๋ฉด ๋ชซ์ return
return GCD(b, a%b); // ์๋๋ฉด ์ด๋ฅผ ๊ณ์ํด๋ผ
}
public static int LCM(int a, int b, int gcd) {
return (a*b)/gcd;
}
public static void main(String[] args) {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
try {
st = new StringTokenizer(bf.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int gcd = GCD(a, b);
int lcm = LCM(a, b, gcd);
System.out.println(gcd);
System.out.println(lcm);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}