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

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

meteorqz6 2024. 7. 14. 15:28

๋ฌธ์ œ ์„ค๋ช…

๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ๋ณด์„ธ์š”. ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ๊ทธ๋‹ค์Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ์ˆ˜ 3, 12์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 3, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 12์ด๋ฏ€๋กœ solution(3, 12)๋Š” [3, 12]๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ ์กฐ๊ฑด

  • ๋‘ ์ˆ˜๋Š” 1์ด์ƒ 1000000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ 

n m return
3 12 [ 3, 12 ]
2 5 [ 1, 10 ]

 

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

์ž…์ถœ๋ ฅ ์˜ˆ #1 ์œ„์˜ ์„ค๋ช…๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ž์—ฐ์ˆ˜ 2์™€ 5์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 1, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 10์ด๋ฏ€๋กœ [ 1, 10 ] ์„ ๋ฆฌํ„ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

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

function gcd(a, b) {

    while( b !== 0){
        let temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

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

function solution(n, m) {
    return [gcd(n,m), lcm(n,m)];
}

 

  • gcd(a,b) : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ๋‘ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. 
  • lcm(a,b) : ๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ๋‘ ์ˆ˜์˜ ๊ณฑ์„ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • solution(n,m) : ์ฃผ์–ด์ง„ ๋‘ ์ˆ˜ n, m์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

  1. ๋‘ ์ˆ˜ a ์™€ b ์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” a ๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ r๊ณผ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค. ( gcd(a,b) = gcd(b,r) )
  2. ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  3. ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ์˜ b ๊ฐ’์ด ๋‘ ์ˆ˜ a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋‹ค.

ex ) gcd(48,18) ๋ฅผ ๊ตฌํ•ด๋ณด์ž.

  1. 48%18 = 12 ( r = 12 )  → gcd(48,18) = gcd(18,12)
  2. 18%12 = 6 ( r = 6 )  → gcd(18,12) = gcd(12,6)
  3. 12%6 = 0 ( r = 0 ) → gcd(12,6) = 6
  4. gcd(48,18) = 6

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

function solution(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}

 

r : ๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜ 

ab = a*b : ๋‚˜์ค‘์— ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

r = a%b : r ์ด 0์ด ๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ๋‹ค.