[백준] 3036 링
기약분수 만드는건 여러가지 방법이 있는데, 분자분모의 약수를 각각 구해서 갯수를 차감하는 방식(숫자가 클 때)도 있고
그냥 분자, 분모 중 작은값을 출발로 해서 1씩 낮춰가며 약분해보는 방법도 있다 (숫자가 비교적 작을때 - 후자로 풀었음)
import java.util.*;
import java.io.*;
public class Main{
// 기약분수를 반환하는 함수
static String kiyak(int a, int b){
if( a == 1 || b == 1 ){ // 더이상 약분할게 없다
return a + "/" + b;
}
// 분자가 분모보다 더 작은경우
int rel = 0; // bunja : smaller
int min = a;
int max = b;
// 분자가 더 큰 경우
if( a > b ){
min = b; max = a; rel = 1; // bunja : bigger
}
// 둘 중 작은 값부터 출발해 쭉 나눠본다
for(int i = min ; i >= 2 ; i-- ){
if( min% i == 0 && max%i == 0 ){
return rel == 0 ? (min/i) + "/" + (max/i) : (max/i) + "/" + (min/i);
}
}
// 나눠진게 없다면 그대로 출력하자
return rel == 0 ? (min) + "/" + (max) : (max) + "/" + (min);
}
public static void main(String []args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] ring = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n ; i++){
ring[i] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for(int i = 1 ; i < n ; i++){
sb.append(kiyak(ring[0], ring[i])+"\n");
}
System.out.println(sb);
}
}
Comments