[프로그래머스/C++ 문제 풀이] Lv. 0 - 분수의 덧셈

2024. 6. 21. 19:22·코딩테스트/프로그래머스 (Lv. 0)
728x90
반응형

문제 설명

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

제한 사항

  • 0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예

numer1 demon1 numer2 denom2 result
9 2 1 3 [29, 6]
1 2 3 4 [5, 4]

 

입출력 예 #1

  • 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2

  • 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

문제 풀이

이번 문제는 분수를 덧셈하고 기약 분수로 만드는 문제입니다.

> 기약 분수 : 분자와 분모가 1이 아닌 다른 수로 나눠지지 않는 분수

 

즉, 분모를 일치시키고 덧셈 연산을 수행한 이후 둘의 최대 공약수로 나눠주면 해결되는 간단한 문제입니다.

but.. 저는 기약 분수라는 글을 읽지 못했고, 2차례 오답 처리를 받았습니다.

 

정답 코드

더보기
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int numer1, int denom1, int numer2, int denom2) {
    vector<int> answer;
    
    int i = 0;
    
    int mult1 = -1;
    int mult2 = -1;
    
    // denom(분모) 숫자 일치시키기
    while (true)
    {
        i++;
        // 둘 다 해당 숫자로 나눠진다면?
        if (i % denom1 == 0 && i % denom2 == 0)
        {
            // 분모가 일치한 것이므로 해당 몫만큼 분모와 분자에 곱할 계수를 지정합니다.
            mult1 = i / denom1;
            mult2 = i / denom2;
            
            // 반복문을 즉시 종료합니다.
            break;
        }
    }
        
    // 값을 더해줍니다.
    int nu = numer1 * mult1 + numer2 * mult2;
    int de = denom1 * mult1;
        
    int mn = -1;
        
    // 최대 공약수를 찾습니다.
    for (int i = 1; i <= de; i++)
    {
        if (nu % i == 0 && de % i == 0)
        {
            mn = i;
        }
    }

    // 만약 최대 공약수가 존재한다면?
    if (mn)
    {
        // 최대 공약수로 나눠줍니다.
        nu /= mn;
        de /= mn;
    }

    // 값을 추가합니다.
    answer.push_back(nu);
    answer.push_back(de);
    
    return answer;
}

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 0 - 연속된 수의 합  (0) 2024.06.22
[프로그래머스/C++ 문제 풀이] Lv. 0 - 안전 지대  (0) 2024.06.21
[프로그래머스/C++ 문제 풀이] Lv. 0 - 주사위 게임 3  (0) 2024.06.21
[프로그래머스/C++ 문제 풀이] Lv. 0 - 겹치는 선분의 길이  (0) 2024.06.19
[프로그래머스/C++ 문제 풀이] Lv. 0 - 평행  (0) 2024.06.19
'코딩테스트/프로그래머스 (Lv. 0)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 연속된 수의 합
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 안전 지대
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 주사위 게임 3
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 겹치는 선분의 길이
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    tsoftobjectptr
    Algorithm
    unity
    Unreal Engine
    timelessadventure
    프로젝트
    2022 kakao
    후기
    C++
    fruitspuzzle
    2019 kakao
    ai controller
    구현
    프로그래머스
    dataasset
    fsoftobjectpath
    sesac
    pcce 기출문제
    Summer/Winter Coding
    CS지식
    2018 kakao
    코딩테스트
    프로세스
    project t.a develop
    c#
    청년취업사관학교
    백준
    unrealengine
    delegate
    issac3d
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 0 - 분수의 덧셈
상단으로

티스토리툴바