해설
- 먼저 테스트케이스 수는 따로 빼둔다.
- 이 문제는 최대공약수를 구하고 나서 그 값을 이용해 최대공배수를 구하면 된다.
- 두 수의 최대공약수를 구하는 법은 a를 b로 나눈 나머지가 r이라고 하면 GCD(a,b) - GCD(b,r) 이 되는데, 이 과정을 반복해서 r이 0이 되는 순간 나오는 b의 값이 바로 최대공약수이다.
- 최소공배수는 두 수 a와 b를 곱해준 뒤 최대공약수로 나누면 구해진다.
정답
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const ts = +input.shift();
let result = "";
function gcd(a,b) {
while (b !== 0) {
let r = a % b; // r은 a를 b로 나눈 나머지
a = b; // 그리고 위 해설처럼 a가 b가 되고 b는 r이 되는 과정을 반복한다.
b = r;
}
return a; // b가 0이 되면(나머지가 0이 되면) a값을 반환한다.
}
const lcm = (a,b) => (a * b) / gcd(a,b) ; // 최소공배수를 구하는 변수.
for (let i = 0; i < ts; i++) {
let num = input[i].split(' ').map((a) => +a); // 먼저 받아온 수를 공백으로 나눠준다.
let a = num[0]; // 각각 a,b 로 옮겨주고
let b = num[1];
result += lcm(a, b) + '\n'; // 최소공배수로 돌려준 뒤 개행문자를 붙인다.
}
console.log(result);
반응형
'Programming > 9. BOJ' 카테고리의 다른 글
[Node.js] 백준 1110번: 더하기 사이클 (0) | 2021.07.28 |
---|---|
[Node.js] 백준 10952번: A+B -5 (0) | 2021.07.17 |
백준 2438번 : 별 찍기 - 1 (0) | 2021.07.17 |
백준 10950번:A+B - 3 (0) | 2021.07.17 |
백준 10951번:A+B -4 (0) | 2021.07.08 |
댓글