๐ฉ๐ป๐ป๋ฌธ์ ๋งํฌ
[ํ๋ก๊ทธ๋๋จธ์ค 12953] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (Javascript)
๋ฌธ์ ์ค๋ช
๋ ์์ ์ต์๊ณต๋ฐฐ์(Least Common Multiple)๋ ์
๋ ฅ๋ ๋ ์์ ๋ฐฐ์ ์ค ๊ณตํต์ด ๋๋ ๊ฐ์ฅ ์์ ์ซ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด 2์ 7์ ์ต์๊ณต๋ฐฐ์๋ 14๊ฐ ๋ฉ๋๋ค. ์ ์๋ฅผ ํ์ฅํด์, n๊ฐ์ ์์ ์ต์๊ณต๋ฐฐ์๋ n ๊ฐ์ ์๋ค์ ๋ฐฐ์ ์ค ๊ณตํต์ด ๋๋ ๊ฐ์ฅ ์์ ์ซ์๊ฐ ๋ฉ๋๋ค. n๊ฐ์ ์ซ์๋ฅผ ๋ด์ ๋ฐฐ์ด arr์ด ์
๋ ฅ๋์์ ๋ ์ด ์๋ค์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๋ฐํํ๋ ํจ์, solution์ ์์ฑํด ์ฃผ์ธ์.
์ ํ ์ฌํญ
arr์ ๊ธธ์ด 1์ด์, 15์ดํ์ธ ๋ฐฐ์ด์
๋๋ค.
arr์ ์์๋ 100 ์ดํ์ธ ์์ฐ์์
๋๋ค.
์
์ถ๋ ฅ ์
arr result
[2,6,8,14] 168
[1,2,3] 6
โ๏ธIdea Sketch
2021-06-23
1. ์ต๋๊ณต์ฝ์ GCD (Greatest Common Divisor), ์ต์๊ณต๋ฐฐ์ LCM (Least Common Multiple)
2. ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
- ์๊ฐ๋ณต์ก๋ : O(logN)
3. ์ต๋๊ณต์ฝ์ GCD ๊ตฌํ๊ธฐ
- GCD(A, B) = GCD(B, A%B)
- A%B๊ฐ 0์ด๋๋ ์๊ฐ ์ข ๋ฃ
4. ์ต์๊ณต๋ฐฐ์ LCM ๊ตฌํ๊ธฐ
- (๋ ์์ ๊ณฑ) ๋๋๊ธฐ (์ต๋๊ณต์ฝ์)
- LCM = A*B / GCD
function solution(n, m) {
let lcm = n*m;
while(m%n) [m, n] = [n, m%n]; // 3
return [n, lcm/n]; // 4
}
5. ์ซ์๊ฐ 2๊ฐ๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ, ๊ฐ๋ฅํ๊ฐ?
- A, B์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ค.
- ๊ทธ ์ต์๊ณต๋ฐฐ์์ C์์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ค.
- ๊ทธ ์ต์๊ณต๋ฐฐ์์ D์์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ค.
- …
6. ๋ ์์ ์ต์๊ณต๋ฐฐ์๋ฅผ returnํ๋ LCM() ํจ์ ์์ฑ
7. LCM() ํจ์์ ๋ฆฌํด๊ฐ๊ณผ ๊ทธ ๋ค์ arr๊ฐ์ ๋์์ผ๋ก LCM() ํจ์ ์คํ
- arr ๋๊น์ง ๋ฐ๋ณต
โ๏ธ์์ค์ฝ๋
2021-06-23 ์ ํ์ฑ ํต๊ณผ
function LCM(m, n) {
let lcm = m * n;
while (m % n) [m, n] = [n, m % n];
return lcm / n;
}
function solution(arr) {
let lcm = LCM(arr[0], arr[1]);
for (let i = 2; i < arr.length; i++) lcm = LCM(lcm, arr[i]);
return lcm;
}
โ๏ธ๋ช ๋ต
5๋ฒ์ arr.reduce๋ก ๊ตฌํํจ
์ฌ๊ท๋ฅผ ์ฌ์ฉํด ์ต๋๊ณต์ฝ์ GCD() ํจ์๋ฅผ ์ง๊ด์ ์ผ๋ก ๊ตฌํํจ
function nlcm(num) {
return num.reduce((a,b) => a*b / gcd(a,b))
}
function gcd(a, b) {
return a % b ? gcd(b, a%b) : b
}