C#

[프로그래머스 힌트/답/해석] 분수 더하기

Guk-blog 2024. 1. 29. 10:32
728x90
반응형

힌트

더보기

 -((분자1*분모2) + (분자2*분모1)) 

              (분모1*분모2)

- 계산한 분자와 분모의 값을 2부터 분자의 값까지 순서대로/역순으로 차례로 나누었을 때 나온 최대값으로 분자와 분모를 나누면 최대한 약분된 값이 나온다

정답

더보기
var numer = (numer1 * denom2) + (numer2 * denom1);
var denom = denom1 * denom2;
int maxNum = 1;
for (int i = numer; i > 1; i--)
{
    if (numer % i == 0 && denom % i == 0)
    {
        maxNum = i;
        break;
    }
}
return new int[]{numer / maxNum, denom / maxNum};

해석

더보기
var numer = (numer1 * denom2) + (numer2 * denom1);

분자의 합

var denom = denom1 * denom2;

분모의 값이다

for (int i = numer; i > 1; i--)

numer(분자의 값) 값부터 2까지 차례로 감소하며 반복한다

if (numer % i == 0 && denom % i == 0)
                {
                    maxNum = i;
                    break;
                }

 i가 분자와 분모를 나누었을 때 나머지가 0이면

i가 약분 할 수 있는 가장 큰 수임으로 반복문을 종료한다.

maxNum = i;

분자와 분모를 약분할 수 있는 값 i를 maxNum에 저장

return new int[]{numer / maxNum, denom / maxNum};

분자와 분모를 나눈 값을 배열화 하여 리턴한다

 

 

728x90
반응형