์ฒด๊ฐ Level : โ
โ
โ Review: ์ต๋๊ณต์ฝ์ ์๊ณ ๋ฆฌ์ฆ , ๊ธฐ๋ณธ์ ์ธ ์ํ ์ง์ ํ์ ์ต๋๊ณต์ฝ์ ์๊ณ ๋ฆฌ์ฆ = ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ํ์ฉ์ ํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค! |
๐ก๋ถ๋ชจ ๋ถ์์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ณ , ๊ฐ๊ฐ ๋๋ ์ฃผ๋ฉด ๊ธฐ์ฝ๋ถ์๊ฐ ๋๋ค.
๐ฌ ๊ธฐ์ฝ๋ถ์ :: ๋ถ๋ชจ์ ๋ถ์์ ์ต๋ ๊ณต์ฝ์๊ฐ 1์ธ ๋ถ์๋ฅผ ๋งํฉ๋๋ค.
์ฆ, ๋ถ์์ ๋ถ์์ ๋ถ๋ชจ๊ฐ ์๋ก์์ธ ์ํ, ๋ ์ด์ ์ฝ๋ถ์ด ๋ถ๊ฐ๋ฅํ ์ํ๋ฅผ ์๋ฏธ
๐ฌ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ !! ๋ ์์ ๋๋จธ์ง๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐํ์ฌ GCD์ฐพ์
a๋ฅผ ๐ b๋ก, ๐ b๋ฅผ ๐ r๋ก ๋ฐ๊พธ๊ณ , ๐ r์ด 0์ด ๋ ๋๊น์ง 2๋ฒ ๊ณผ์ ์ ๋ฐ๋ณต
์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ ์ํ์ ์ฑ์ง์ ๊ธฐ๋ฐํฉ๋๋ค
GCD ( ๐ , ๐ ) = GCD ( ๐ , ๐ % ๐ )
GCD(a,b)=GCD(b,a%b) ์ฌ๊ธฐ์ % ๋ ๋๋จธ์ง ์ฐ์ฐ์์ ๋๋ค.
//์ต๋๊ณต์ฝ์(GCD, Greatest Common Divisor)๋
//๋ ๊ฐ ์ด์์ ์ ์์ ๊ณตํต๋ ์ฝ์ ์ค ๊ฐ์ฅ ํฐ ์
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
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] = denom1 * denom2 ;
//๋ถ์์ ๋ถ์์ ๋ถ๋ชจ์ ์ต๋ ๊ณต์ฝ์(GCD)
int a = answer[0] , b = answer[1];
while (a != 0) {
int temp = a;
a = b % a;
b = temp;
}
//๋ถ์์ ๋ถ๋ชจ๋ฅผ ์ต๋ ๊ณต์ฝ์๋ก ๋๋์ด์ค๋๋ค.
answer[0] = answer[0] / b;
answer[1] = answer[1] / b;
//๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์์ ๋ถ๋ชจ๋ก ํ๋ ๋ถ์๊ฐ ๊ธฐ์ฝ๋ถ์
return answer;
}
}
[์คํจ]
ํ ์คํธ ์ผ์ด์ค๋ ๋ง์์ง๋ง ๋ฐ๋ก๊ฐ ๋ง์๋๋ณด๋ค... ๊ฑฐ์ ๋ค ํ๋ ธ๋ค ใ ใ ใ ใ
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int [2];
if (denom1 == denom2){
answer[0] = numer1 + numer2;
answer[1] = denom1;
}else if (denom2 % denom1 == 0){
int tmp = denom1;
denom1 *= denom2/denom1;
numer1 *= denom2/tmp;
}else if(denom1 % denom2 == 0){
denom2 *= denom1/denom2;
numer2 *= denom1/denom2;
}else {
int tmp = denom2;
denom2 *= denom1; numer2 *= denom1;
denom1 *= tmp; numer1 *= tmp;
}
answer[0] = numer1 + numer2;
answer[1] = denom1;
return answer;
}
}