Hope Everyone Is Happy

[실버5] 14490. 백대열(Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[실버5] 14490. 백대열(Java)

J 크 2023. 8. 13. 23:30
728x90
반응형

https://www.acmicpc.net/problem/14490

 

14490번: 백대열

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

www.acmicpc.net

과음 이슈...22


※  문제를 요약하면 아래와 같습니다.

▶ 입력으로 n:m 이 주어졌을 때 최대한으로 약분하여 출력

◈ Input - 1

18:24

◈ Output - 1

3:4

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

두 수를 최대로 약분 == 두 수를 최대 공약수로 나누기

 유클리드 호제법 활용, 최대공약수 구한 후, 최대공약수로 입력된 값 나누어서 문자열 형태로 출력

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class Main {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String[] strInput = bReader.readLine().split(":");
		int N = Integer.parseInt(strInput[0]);
		int M = Integer.parseInt(strInput[1]);
		
		int nFirstNum = N;
		int nSecondNum = M;
		
		int nMul = nFirstNum * nSecondNum;
		
		// 최대 공약수는 나머지가 0이 될 때 까지.
		int nRemainder = 0;
		while(nSecondNum > 0) {
			nRemainder = nFirstNum % nSecondNum;
			nFirstNum = nSecondNum;
			nSecondNum = nRemainder;
		}
		int nGCL = nFirstNum;
		
		N /= nGCL;
		M /= nGCL;
		
		StringBuilder strBuild = new StringBuilder();
		strBuild.append(String.valueOf(N) + ":" + String.valueOf(M));
		
		String strResult = strBuild.toString();
		bWriter.write(strResult);
		bWriter.flush();
		bWriter.close();
	}
}

읽어주셔서 감사합니다!

Good Luck! (피드백 고맙습니다)