๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿš€ Algorithm/PGS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถ„์ˆ˜์˜ ๋ง์…ˆ (JAVA)

 

 

 

๐Ÿ’ก ๋ฌธ์ œ 

์ฒซ ๋ฒˆ์งธ ๋ถ„์ˆ˜์˜ ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ๋œปํ•˜๋Š” numer1denom1, ๋‘ ๋ฒˆ์งธ ๋ถ„์ˆ˜์˜ ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ๋œปํ•˜๋Š” numer2denom2๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๋ถ„์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์„ ๊ธฐ์•ฝ ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด์€ ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”.

 

๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„:

  • ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ๋ถ„์ˆ˜์˜ ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๊ตฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์•ฝ ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๊ธฐ์•ฝ ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒฐ๊ณผ์˜ ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•œ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ๋ถ„์ˆ˜์˜ ๋ถ„๋ชจ(denominator)์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(lcm)๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(lcm)๋กœ ๊ฐ ๋ถ„์ˆ˜์˜ ๋ถ„์ž(numerator)๋ฅผ ๊ณฑํ•œ ๋’ค, ๋”ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ถ„์ž๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ถ„์ž์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(lcm)๋ฅผ ๊ธฐ์•ฝ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๋•Œ, ๋ถ„์ž์™€ ๋ถ„๋ชจ์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(gcd)๋ฅผ ๊ตฌํ•œ ๋’ค, ๊ฐ๊ฐ์„ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์ค€๋‹ค.
  •  

 

์‹œ๊ฐ„ ๋ณต์žก๋„:

์ฃผ์–ด์ง„ ๋ฌธ์ œ๋Š” ๋ถ„์ˆ˜์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์•ฝ ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์š”๊ตฌ๋œ๋‹ค. ๋ถ„์ˆ˜์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์€ ๋ถ„๋ชจ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„, ๋‘ ๋ถ„์ˆ˜์˜ ๋ถ„์ž๋ฅผ ๊ณฑํ•˜์—ฌ ๋ถ„๋ชจ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค. ์ด๋•Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์—์„œ O(n)์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฉฐ, ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ๊ณฑํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ O(n)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

 

 
์•Œ๊ณ ๋ฆฌ์ฆ˜:
  1. ์ฃผ์–ด์ง„ ๋‘ ๋ถ„์ˆ˜์˜ ๋ถ„๋ชจ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ž€ ๋‘ ์ˆ˜์˜ ๊ณตํ†ต์ธ ๋ฐฐ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  2. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ๋ถ„์ˆ˜์˜ ๋ถ„์ž๋ฅผ ๊ณฑํ•œ ๋’ค, ๋”ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ถ„์ž๋ฅผ ๊ตฌํ•œ๋‹ค.
  3. ์ƒˆ๋กœ์šด ๋ถ„์ž์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ธฐ์•ฝ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. (๊ธฐ์•ฝ๋ถ„์ˆ˜: ๋ถ„์ž์™€ ๋ถ„๋ชจ๊ฐ€ ์„œ๋กœ์†Œ์ธ ๋ถ„์ˆ˜) ์ด๋•Œ, ๋ถ„์ž์™€ ๋ถ„๋ชจ์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋’ค, ๊ฐ๊ฐ์„ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆˆ๋‹ค.
๋”๋ณด๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, 2/3๊ณผ 3/4์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค๋ฉด, ๋จผ์ € 3๊ณผ 4์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์ธ 12๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2/3์„ 8/12๋กœ, 3/4๋ฅผ 9/12๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค, ๋”ํ•ด์ค€๋‹ค. ๋”ฐ๋ผ์„œ, 2/3 + 3/4 = 8/12 + 9/12 = 17/12๊ฐ€ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, 17/12๋ฅผ ๊ธฐ์•ฝ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด, ๋ถ„์ž์™€ ๋ถ„๋ชจ์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ์ด ๊ฒฝ์šฐ, 17๊ณผ 12์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 1์ด๋ฏ€๋กœ, 17/12๊ฐ€ ๊ธฐ์•ฝ๋ถ„์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

 

 

๐Ÿ– ๋‚ด ๋‹ต์•ˆ

import java.util.*;

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        // 1. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(lcm) ๊ณ„์‚ฐ
        int lcm = (denom1 * denom2) / gcd(denom1, denom2);

        // 2. ์ƒˆ๋กœ์šด ๋ถ„์ž ๊ณ„์‚ฐ
        int newNumer = numer1 * (lcm / denom1) + numer2 * (lcm / denom2);

        // 3. ๊ธฐ์•ฝ๋ถ„์ˆ˜๋กœ ๋ณ€ํ™˜
        int gcd = gcd(newNumer, lcm);
        return new int[] { newNumer / gcd, lcm / gcd };
    }

    // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ณ„์‚ฐ ํ•จ์ˆ˜
    private int gcd(int a, int b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }
}

 

 

 

import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int lcm = lcm(denom1, denom2);
        int newNumer = numer1 * (lcm / denom1) + numer2 * (lcm / denom2);
        int gcd = gcd(newNumer, lcm);
        return IntStream.of(newNumer / gcd, lcm / gcd).toArray();
    }

    public int lcm(int a, int b) {
        return a * b / gcd(a, b);
    }

    public int gcd(int a, int b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }
}