본문 바로가기
JS/백준

[백준JS] 1735. 분수 합

by 박기린 2023. 4. 16.

안녕하세요. 박기린 입니다.

백준 1735번 분수 합 문제를 풀어봅시다.

 

 

문제 링크

https://www.acmicpc.net/problem/1735

 

 


문제 해석

최대공약수를 구하면 기약분수를 바로 구할 수 있습니다.

두 분수를 더한 다음, 분모와 분자의 최대 공약수를 구하고, 분모와 분자를 각각 최대공약수로 나눠주면 기약분수가 됩니다.

 

최대공약수는 유클리드 호제법으로 구하면 됩니다.

// 유클리드 호제법으로 최대공약수를 구하는 식
const gcd = (x, y) => {
  if (y == 0) return x;
  else return gcd(y, x % y);
};

 

 

 


정답 코드

const fs = require("fs");
const [moles, denoms] = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

let [fM, fD] = moles.split(" ").map(BigInt);
let [sM, sD] = denoms.split(" ").map(BigInt);

let mole = fM * sD + sM * fD;
let denom = fD * sD;

const gcd = (x, y) => {
  // console.log(x, y)
  if (y == 0) return x;
  else return gcd(y, x % y);
};

const divisor = gcd(mole, denom);

console.log(`${mole / divisor} ${denom / divisor}`);

 

 

 


정답 코드 풀이

const fs = require("fs");
const [moles, denoms] = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

let [fM, fD] = moles.split(" ").map(BigInt);
let [sM, sD] = denoms.split(" ").map(BigInt);

fM, fD : 첫 번째 분수의 분자와 분모입니다.

sM, sD: 두 번째 분수의 분자와 분모입니다.

 

 

 

let mole = fM * sD + sM * fD;
let denom = fD * sD;

moledenom은 두 분수를 합한 후의 분자와 분모입니다.

 

 

 

const gcd = (x, y) => {
  // console.log(x, y)
  if (y == 0) return x;
  else return gcd(y, x % y);
};

const divisor = gcd(mole, denom);

유클리드 호제법을 이용해서 분자와 분모 간의 최대공약수를 구합니다.

 

 

 

console.log(`${mole / divisor} ${denom / divisor}`);

최대공약수로 분자와 분모를 나눈 후 출력을 하면 끝입니다.

 

반응형

'JS > 백준' 카테고리의 다른 글

[백준JS] 13909. 창문 닫기  (0) 2023.04.19
[백준JS] 2485. 가로수  (0) 2023.04.18
[백준JS] 2903. 중앙 이동 알고리즘  (0) 2023.04.10
[백준JS] 11005. 진법 변환 2  (0) 2023.04.04
[백준JS] 2745. 진법 변환  (0) 2023.04.01