본문 바로가기

문제 풀이/Baekjoon

[백준] S4 14490번 백대열 (JAVA)

문제 출처 - Baekjoon Online Judge

문제는 여기

 

14490번: 백대열

n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)

www.acmicpc.net

[문제] 

대열이는 욱제의 친구다.

  • “야 백대열을 약분하면 뭔지 알아?”
  • “??”
  • “십대일이야~ 하하!”

n:m이 주어진다. 욱제를 도와주자. (...)

[입력]

n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)

[출력]

두 수를 최대한으로 약분하여 출력한다.

 

 


[풀이]

1. ":"을 기준으로 숫자들이 입력되기 때문에 split을 사용해 ":"을 기준으로 나눠준다.

2. 최대 공약수인 gcd를 구해서 이로 나누어 결과를 출력해준다.

[접근]

1. 두 수를 최대한으로 약분하여 출력한다는 뜻은 최대공약수를 구해 이로 나눠준 것을 뜻하기 때문에 최대 공약수를 구해준다.

[코드]

package BOJ_silver;

import java.io.*;
import java.util.*;

public class Main_S4_14490 {
	static int n;
	static int m;
	static String[] splited;
	static int gcd;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// A:B로 입력이 들어오기 때문에 :을 기준으로 split을 해 나눠준다.
        splited = br.readLine().split(":");
        // 나눠진 것을 기준을 앞을 n 뒤를 m으로 넣어준다. (그냥은 문자열이니까 Integer.parseInt를 사용)
        n = Integer.parseInt(splited[0]);
        m = Integer.parseInt(splited[1]);
        
        // 최대공약수를 구해준다.
        gcd = gcd(Math.max(n, m), Math.min(n, m));

        // 최대 공약수로 나눈 값을 결과값으로 출력한다.
        System.out.println(n / gcd + ":" + m / gcd);
    }

	// 최대 공약수
    static int gcd(int a, int b) {
        if (b == 0)
        	return a;
        
        return gcd(b, a % b);
    }
}