๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 2609 ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 4.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 2609 ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜์™€ ์ตœ๋Œ€  ๊ณต์•ฝ์ˆ˜ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ๋Š” 2๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ GCD, LCM ์ฒ˜๋ฆฌํ•˜๋ผ๋Š” ๋ฌธ์ œ์ด๋‹ค.


GCD, LCM์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๊ตฌํ•œ๋‹ค๋ฉด O(N^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์†Œ์š”๋œ๋‹ค.


ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—์„œ๋Š” ์‹œ๊ฐ„ ์ œํ•œ๋„ ๋„‰๋„‰ํ•˜๊ณ  n์ด 2๋กœ ๊ณ ์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•ด๋„ ์ œํ•œ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋” ์ ์€ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด์„œ O(log N)์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž.

์ ‘๊ทผ๋ฒ•

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค.


๋งŒ์•ฝ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜์—์„œ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์„ ์ ๊ทน ์ถ”์ฒœํ•œ๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹œ๊ฐ„์„ ๋ถ„์„ํ•ด๋ณด์ž.

 

  1. ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•œ ๊ตฌํ˜„
  2. ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ†ตํ•œ ๊ตฌํ˜„

๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•œ ๊ตฌํ˜„

public class Main {
  public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String[] ab = br.readLine().split(" ");
    int a = Integer.parseInt(ab[0]);
    int b = Integer.parseInt(ab[1]);

    bw.write(gcdByLoop(a, b) + "\n" + lcm(a, b));
    bw.flush();
    bw.close();
  }

  private static int gcdByLoop(int a, int b) {
    while(b > 0) {
      int temp = b;
      b = a % b;
      a = temp;
    }
    return a;
  }

  private static int lcm(int a, int b) {
    return (a * b) / gcdByLoop(a, b);
  }
}

์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•œ ๊ตฌํ˜„

public class Main {
  public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String[] ab = br.readLine().split(" ");
    int a = Integer.parseInt(ab[0]);
    int b = Integer.parseInt(ab[1]);

    bw.write(gcdByRecursive(a, b) + "\n" + lcm(a, b));
    bw.flush();
    bw.close();
  }

  private static int gcdByRecursive(int a, int b) {
    if(b == 0) {
      return a;
    }
    return gcdByRecursive(b, a % b);
  }

  private static int lcm(int a, int b) {
    return (a * b) / gcdByRecursive(a, b);
  }
}

๋งŒ์•ฝ ์žฌ๊ท€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ ‘๊ทผ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€