본문 바로가기
Programming/9. BOJ

[Node.js] 백준 1934번: 최소공배수

by @sangseophwang 2021. 7. 28.

해설

  • 먼저 테스트케이스 수는 따로 빼둔다.
  • 이 문제는 최대공약수를 구하고 나서 그 값을 이용해 최대공배수를 구하면 된다.
  • 두 수의 최대공약수를 구하는 법은 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

댓글