<Algorithm> 55. 1735번 분수 합(유클리드)
by BFine반응형
1. 1735번 분수 합
유클리드 호제법 문제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int upA = Integer.parseInt(st.nextToken()); int downA = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); int upB = Integer.parseInt(st.nextToken()); int downB = Integer.parseInt(st.nextToken()); int quoA = gcm(downA, downB)/downA * upA; int quoB = gcm(downA, downB)/downB * upB; int sum = quoA + quoB; int gcdSum = 0; int gcm = gcm(downA, downB); while(gcdSum != 1) { gcdSum = gcd(sum, gcm); sum = sum / gcdSum; gcm = gcm / gcdSum; }// 기약분수 형태로 만들기 System.out.println(sum+" "+gcm); } public static int gcd(int a, int b) { // 유클리드 호제법 이용, 최대 공약수 구하기 if(a < b) { int temp = a; a = b; b = temp; } while(true) { int r = a % b; if(r == 0) { return b; // 0이면 b가 최대 공약수가 된다. }else { a = b; b = r; // a -> b, b -> r } } } public static int gcm(int a, int b) { // 최소 공배수 = 두 수 곱 / 최대 공약수 return (a * b) / gcd(a, b); } } | cs |
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 57. 10815번 숫자카드(BinarySearch) (0) | 2018.08.18 |
---|---|
<Algorithm> 56. 2263번 트리의 순회 (0) | 2018.08.17 |
<Algorithm> 54. 2579번 계단 오르기 (0) | 2018.08.15 |
<Algorithm> 53. 11404번 플로이드 (0) | 2018.08.15 |
<Algorithm> 52. 1922번 네트워크 연결 (0) | 2018.08.14 |
블로그의 정보
57개월 BackEnd
BFine