코딩테스트/백준
[백준 - 1850] 최대공약수 .java
머밍
2024. 8. 5. 15:28
https://www.acmicpc.net/problem/1850
문제 분석
처음에 예제가 이해 안돼서 애를 먹었다.
1의 길이라는 두 수를 입력 받고 그 두 수의 최대 공약수를 구하라는게 무슨 말인지..
하지만 예제 3을 보고 알았다
단순히 길이라고 입력받은 두 수의 최대공약수를 구한다. 예제 3 경우에는 2이다.
그럼 결과는 1로 이루어진 수를 출력하면 되기 때문에 그 수의 길이는 위에서 구한 최대공약수면 된다.
문제가 너무 대충 설명한 것 같다.
수의 길이를 나타내는 두 수의 최대 공약수
= a, b의 최대 공약수의 길이
하지만 입력되는 수와 최대 공약수는 long 타입으로 선언해야하며
정답은 1000만 자리를 넘지 않는다는 조건 때문에 BufferedWriter를 통해 출력해야한다.
(일반적으로 하면 시간 초과)
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
//효율적인 출력 처리
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//두 개의 long 타입 숫자 입력 받음
long a = sc.nextLong();
long b = sc.nextLong();
//두 숫자의 최대공약수
long answer = gcb(a,b);
//최대공약수의 값만큼 '1'을 출력
for(int i = 0; i <answer; i++){
bw.write("1");
}
//BufferedWriter 버퍼를 비우고 닫기
bw.flush();
bw.close();
}
//유클리드 호제법 함수
public static long gcb(long a, long b) {
//b가 0이 되면 a가 최대공약수
if(b==0) return a;
//재귀적으로 호출
else return gcb(b, a % b);
}
}