• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바