Algorithm๐Ÿฅ‡

2609.์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

hae02y 2023. 10. 17. 14:00
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ๋‘˜์€ 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์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆˆ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

์ฆ‰ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  2. ๋‘์ˆ˜์˜ ๊ณฑ๊ณผ ๊ตฌํ•ด์ง„ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๋‚˜๋ˆ ์ค€๋‹ค.

์œ„์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ๊ณผ์ •์— ๋Œ€์ž…ํ•ด์„œ ์˜ˆ์‹œ๋ฅผ ํ’€๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ณ„์‚ฐ๊ณผ์ •

  • 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;  
}  
}
๋ฐ˜์‘ํ˜•