[백준/BOJ] 1735번 분수 합 (Node js / Javascript)
2023. 10. 10. 13:35ㆍ코딩 테스트 (BOJ)
https://www.acmicpc.net/problem/1735
문제 해석
각각 A / B로 이루어진 두 개의 분수가 "A B" 와 같은 형식으로 두 줄에 나뉘어서 입력 받는다.
그리고 입력받은 두 분수의 합을 기약 분수로 나타내는 것이 문제이다.
즉, 두 분수의 합을 A3 / B3 이라 할 때, A3와 B3의 공약수가 없을때까지 같은 수로 나눠주면 된다.
1. 두 분수를 합하려면 분모를 같은 수로 통일시켜줘야 한다. 단순히 두 분모를 서로 곱해줘도 되지만 나는 지난 문제에서 배운 최대공배수를 복습하는 겸 사용하고 싶어서 최대공배수로 분모를 통일시켰다. - 최대공배수 = B3
ex) 1/6 + 1/15 => 5/30 + 2/30
let big = (deno1 > deno2) ? deno1 : deno2; // deno1 = 분모1, deno2 = 분모2
let small = (deno1 < deno2) ? deno1 : deno2;
let mod = big % small;
while(mod != 0){ //유클리드 호제법
let tmp = mod;
mod = small % mod;
small = tmp;
}
let GCD = small; //GCD == 최대공약수
let LmsOfDeno = deno1 * deno2 / GCD; //LMS == 최소공배수
2. 분모가 통일 됐다면 분자끼리 더해주면 된다. 두 분자가 더해진 값(A3)이 분모(B3)와 공통된 1을 제외한 공통된 약수가 없다면 기약분수가 되겠지만, A3와 B3의 공약수가 존재하는 케이스도 처리해줘야 하기 때문에 이런 경우에 위에서 말했듯이 A3와 B3의 공약수가 없을때까지 같은 수로 나눠주면 된다.
let numer = numer1 + numer2;
let i = LmsOfDeno;
while(i > 0){
if(numer == 1 || i == 1){
break;
}
if((numer % i == 0)&&(LmsOfDeno % i == 0)){
LmsOfDeno = LmsOfDeno / i;
numer = numer / i;
}else{
i--;
}
}
전체코드
const fs = require("fs");
const input = fs
.readFileSync("../input.txt")
.toString()
.trim()
.split("\n")
.map((item) => item.split(" "));
const arr = input.map((item) => item.map((item) => Number(item)));
let numer1 = arr[0][0];
let deno1 = arr[0][1];
let numer2 = arr[1][0];
let deno2 = arr[1][1];
let big = (deno1 > deno2) ? deno1 : deno2;
let small = (deno1 < deno2) ? deno1 : deno2;
let mod = big % small;
while(mod != 0){
let tmp = mod;
mod = small % mod;
small = tmp;
}
let GCD = small;
let LmsOfDeno = deno1 * deno2 / GCD;
numer1 = numer1 * (LmsOfDeno / deno1);
numer2 = numer2 * (LmsOfDeno / deno2);
let numer = numer1 + numer2;
let i = LmsOfDeno;
while(i > 0){
if(numer == 1 || i == 1){
break;
}
if((numer % i == 0)&&(LmsOfDeno % i == 0)){
LmsOfDeno = LmsOfDeno / i;
numer = numer / i;
}else{
i--;
}
}
console.log(numer + " " + LmsOfDeno);
-끝-
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준 / BOJ] 4134번 다음 소수 (Javascript / Node js) (0) | 2023.10.13 |
---|---|
[백준 / BOJ] 2485번 가로수 (Javascript / Node js) (0) | 2023.10.12 |
[백준/BOJ] 1934번 최소공배수 (Javascript / Node js) (0) | 2023.10.10 |
[백준/BOJ] 11478번 서로 다른 부분 문자열의 개수 (Javascript / Node js) (0) | 2023.10.10 |
[백준/BOJ] 1269번 대칭 차집합 (Javascript / Node js) (0) | 2023.10.06 |