문제 링크
https://www.acmicpc.net/problem/3036
풀이
const [_, ...radius] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const getGCD = (a, b) => {
let big = Math.max(a, b);
let small = Math.min(a, b);
let remainder = big % small;
while (remainder) {
big = small;
small = remainder;
remainder = big % small;
}
return small;
};
const first = radius[0];
const output = radius.slice(1).map(rad => {
const gcd = getGCD(first, rad);
return `${first/gcd}/${rad/gcd}`;
});
console.log(output.join('\n'));
각 링들은 (첫 번째 링의 반지름 / 각 링의 반지름) 바퀴씩 돌게 된다.
이 때, 바퀴를 기약분수로 표현해야 하는데,
분모와 분자 모두를 분모와 분자의 최대공약수로 나누어 주면 기약 분수를 만들 수 있다.
그래서 최대공약수를 구하는 getGCD를 선언하고, 이를 활용하여 해결하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 10994 - Node.js] 별 찍기 - 19 (0) | 2022.03.28 |
---|---|
[백준 2748 - Node.js] 피보나치 수 2 (0) | 2022.03.19 |
[백준 1744 - Node.js] 수 묶기 (0) | 2021.12.06 |
[백준 1339 - Node.js] 단어 수학 (0) | 2021.12.06 |
[백준 1182 - Node.js] 부분수열의 합 (0) | 2021.12.01 |