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
해당 알고리즘 문제는 프로그래머스의 알고리즘 문제입니다.
관련자료
-
이전
-
다음