์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

Lv.0 ๋ถ„์ˆ˜์˜ ๋ง์…ˆ

meteorqz6 2024. 7. 25. 00:45

๋ฌธ์ œ ์„ค๋ช…

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

 

์ œํ•œ ์กฐ๊ฑด

  • 0 <numer1, denom1, numer2, denom2 < 1,000

์ž…์ถœ๋ ฅ ์˜ˆ

numer1 denom1 numer2 denom2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ#1

  • 1 / 2 + 3 / 4 = 5 / 4 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [5, 4]๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ#2

  • 9 / 2 + 1 / 3 = 29 / 6 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [29, 6]์„ return ํ•ฉ๋‹ˆ๋‹ค. 

 

< ๋‚˜์˜ ํ’€์ด > 

https://y9s2n6.tistory.com/10

 

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

๋ฌธ์ œ ์„ค๋ช…๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ๋ณด์„ธ์š”. ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ๊ทธ๋‹ค์Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค

y9s2n6.tistory.com

์ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ์˜ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. 

function gcd(a, b) {
    while ( b!== 0 ) {
        let tmp = b;
        b = a % b;
        a = tmp;
    }
    return a;
}

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

function solution(numer1, denom1, numer2, denom2) {
    
    let n1 = lcm(denom1, denom2);
    let n2 = n1/denom1*numer1 + n1/denom2*numer2;
    
    if(gcd(n1,n2) !== 1){
        return [n2/gcd(n1,n2) , n1/gcd(n1,n2)]
    }
    else{
        return [n2,n1];
    }
}

 

'๊ธฐ์•ฝ๋ถ„์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ' ๋ผ๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์— ์˜ค๋‹ต์ด์—ˆ๋‹ค๊ฐ€ ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์„œ ์ •๋‹ต์ด ๋˜์—ˆ๋‹ค.

๊ทผ๋ฐ ๋ญ”๊ฐ€ ํ’€์ด๊ฐ€ ๋Œ๊ณ ๋Œ์•„ ๊พธ์—ญ๊พธ์—ญ ํ‘ผ ๋А๋‚Œ์ด๋ผ(???) ์ด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ช…ํ™•ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ถ๊ธˆํ•ด์กŒ๋‹ค. 

 

๊ธฐ์•ฝ๋ถ„์ˆ˜ : ๋ถ„๋ชจ์™€ ๋ถ„์ž์˜ ๊ณต์•ฝ์ˆ˜๊ฐ€ 1 ๋ฟ์ธ ๋ถ„์ˆ˜

๋ถ„๋ชจ์™€ ๋ถ„์ž๋ฅผ ๊ทธ๋“ค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆ„๋ฉด ๊ธฐ์•ฝ๋ถ„์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

< ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด > 

function fnGCD(a, b){
    return (a%b) ? fnGCD(b,a%b) : b;
}

function solution(numer1, denom1, numer2, denom2) {
    let num = numer1*denom2 + numer2*denom1;
    let denom = denom1*denom2;
    let gcd = fnGCD(num, denom);
    
    return [num/gcd, denom/gcd];
}

 

fnGCD(a, b) : ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

a%b๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด, fnGCD(b, a%b )๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

a%b๊ฐ€ 0์ด๋ฉด b๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ( ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ : b ) 

 

๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถ„์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ๊ณ„์‚ฐํ•œ ๋’ค, ๋ถ„์ž์™€ ๋ถ„๋ชจ๋ฅผ ๊ทธ๋“ค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ด๋‹ค.