- BOJ - 분수 합 (1735번)2024년 11월 30일
- 학페
- 작성자
- 2024.11.30.:01
https://www.acmicpc.net/problem/1735
최대공약수, 최소공배수 혼합 문제였다.
접근방법
1. 분모의 최소공배수를 구해서 lcd라고 하자.
2. 분모를 lcd로 통분할건데, 분모먼저 바꾸면 안된다. 분자 먼저 바꿔야 한다.
3. 분자 * (lcd/분모) 해서 분자 통분.
4. 분모 * (lcd/분모) 해서 분모 통분.
5. 통분 끝났으니 분자의 합을 구하자. 변수 만들어서 합을 저장.
6. 분자의 합과 분모의 최대공약수를 구하자.
7. 분자의 합과 분모의 합을 최대공약수로 나누어 기약분수 형태로 만든 뒤 출력
전체 코드
더보기#include <iostream> #include <stack> #include <string> #include <unordered_map> #include <vector> #include <algorithm> using namespace std; typedef long long int ll; ll getLcd(ll max, ll min); // 최소공배수 구하는 함수 ll getGcd(ll max, ll min); // 최대공약수 구하는 함수 int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // a / b // c / d int a, b, c, d, sumOfNumerator, gcd; cin >> a >> b >> c >> d; // 1. 분모의 최소 공배수 구하기 int lcd = getLcd(max(b, d), min(b, d)); // 2. 각 분자를 분모에 곱해진 수 만큼 똑같이 곱해주기 a = a * (lcd / b); c = c * (lcd / d); // 3. 분자를 최소공배수만큼 바꿔주기 b = b * (lcd / b); d = d * (lcd / d); // 4. 분자의 합 구하기 sumOfNumerator = a + c; // 5. 분자와 분모의 최대공약수 구해서 분자와 분모 나누기 gcd = getGcd(sumOfNumerator, b); cout << sumOfNumerator / gcd << ' ' << b / gcd; return 0; } ll getLcd(ll max, ll min) { ll a = max, b = min, tmp, gcd; while (b != 0) { tmp = a; a = b; b = tmp % b; } gcd = a; return max * min / gcd; } ll getGcd(ll max, ll min) { ll a = max, b = min, tmp;; while (b != 0) { tmp = a; a = b; b = tmp % b; } return a; }
'Baekjoon Online Judge > C++' 카테고리의 다른 글
BOJ - 골드바흐 파티션 (17103번) (0) 2024.12.02 BOJ - 가로수 (2485번) (0) 2024.12.01 BOJ - 최소공배수 (13241번) (유클리드 호제법 응용) (0) 2024.11.29 BOJ - 서로 다른 부분 문자열의 개수 (11478번) (C++ unordered_map find함수) (0) 2024.11.28 BOJ - 문자열 집합 (14425번) (0) 2024.11.27 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)