728x90
최대 공약수랑 최소 공배수를 바로 생각했었어야 했는데 진짜 무식하게 풀었다.
두 분수를 더한 값을 분자는 0, 분모는 1 인덱스에 넣어주는 문제다.
JavaScript
- 최소 공배수로 깔끔하게 했으면 됐는데, 그냥 머리속에 계산 하듯이 조건 나눴다.
- 정답이 안 나오길래 보니 마지막에 약분을 해야한다.
function solution(numer1, denom1, numer2, denom2) {
let answer = null;
if (denom1 % denom2 == 0 || denom2 % denom1 == 0) {
if (denom1 >= denom2) {
const div = denom1 / denom2;
answer = [numer1 + numer2 * div,
denom1];
} else {
const div = denom2 / denom1;
answer = [numer1 * div + numer2,
denom2];
}
} else {
answer = [numer1 * denom2 + numer2 * denom1,
denom1 * denom2];
}
const num = findMaxDivde(answer[0], answer[1]);
return answer.map((el) => el / num);
}
// 두수의 최대 공약수
function findMaxDivde(a, b) {
if (a === b) {
return a;
}
const bigger = a > b ? a : b;
let answer = 1;
for(let i = 1; i < bigger; i++) {
if (a % i === 0 && b % i === 0) {
answer = i;
}
}
return answer;
}
JAVA
- GCD와 LCS를 구하는 모듈을 짜고 구하는 모습이다.
- 마지막에 정답 잘 구해도 또 약분해야 한다.
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int gcd = findGcd(denom1, denom2);
int lcs = findLcs(denom1, denom2);
int up = (numer1 * denom2 + numer2 * denom1) / gcd;
int down = lcs;
int finalGcd = findGcd(up, down);
return new int[]{up / finalGcd, down / finalGcd};
}
public int findGcd(int a, int b) {
if (a == b) {
return a;
}
int answer = 1;
int bigger = a > b ? a : b;
for (int i = 1; i < bigger; i++) {
if (a % i == 0 && b % i == 0) {
answer = i;
}
}
return answer;
}
public int findLcs(int a, int b) {
return a * b / findGcd(a, b);
}
}
300x250
'알고리즘' 카테고리의 다른 글
[프로그래머스] 정렬 (0) | 2023.08.01 |
---|---|
[프로그래머스] Greedy (0) | 2023.07.29 |
[프로그래머스] 최댓값 만들기 (1) (0) | 2023.07.16 |
[프로그래머스] 구슬을 나누는 경우의 수 (0) | 2023.07.11 |
[프로그래머스] 옹알이(1) (0) | 2023.03.19 |