코딩테스트

C# 알고리즘 - 분수의 덧셈

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

 

[문제 설명]

 

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

 

[제한사항]

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

 

[입출력 예]

 

[입출력 예 설명]

입출력 예 #1

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

 

입출력 예 #2

 

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

 

[코드]

using System;


public class Solution {

    public int[] solution(int numer1, int denom1, int numer2, int denom2) {

        int[] answer = new int[2]; 

        answer[0] = numer1 * denom2 + numer2 * denom1 ; 

        answer[1] = denom2 * denom1;


        int Max = answer[0];

        int MaxNum = 0;

        for(int i = 1; i <= Max; i++)

        {

            if(answer[0] % i == 0 && answer[1] % i == 0)

            {

                MaxNum = i;

            }

        }

        answer[0] = answer[0] / MaxNum;

        answer[1] = answer[1] / MaxNum;

        return answer;

    }

}

 

[풀이]

1.answer에는 2개의 데이터를 넣어야 되서 new int[2];

 

2.분자 구하는 공식 

 answer[0] = numer1 * denom2 + numer2 * denom1 ;  

 

3.분모 구하는 공식

answer[1] = denom2 * denom1;

 

4.기약분수

기약분수는 분자와 분모가 공통된 수로 나뉘어지는 수 (인수분해)

4-1 분자값을 변수에 담고 for문을 사용하여 분자의 값 만큼 돌림

int Max = answer[0];

for(int i = 1; i <= Max; i++)

4-2 분자와 분모가 같은 수로 나뉘어 질때의 값을 구하기

if(answer[0] % i == 0 && answer[1] % i == 0)

{

    MaxNum = i;

 

}

 

5.인수분해 값을 나누어 저장하기

answer[0] = answer[0] / MaxNum;

 

answer[1] = answer[1] / MaxNum;

 

6.제출

 

총평

for문과 if문 나머지를 사용하여 값을 찾아야 합니다. 

난이도가 조금 있는 문제로 기약분수를 구하기가 난이도가 있었던 문제였습니다.


 

 

[주소]

https://school.programmers.co.kr/learn/courses/30/lessons/120808

해당 알고리즘 문제는 프로그래머스의 알고리즘 문제입니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0