https://www.acmicpc.net/problem/1850
정답률 35.389%
모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오.
예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A가 111이고, B가 111111인 경우에는 최대공약수가 111이다.
3 4
1
주어진 입력값들에 대해 최대 공약수를 구하는 문제이다. 입력값은 길이를 의미하는데 예제의 경우 두 자연수 A, B는 111과 1111이 된다. 이렇게 수를 변환한 뒤 최대 공약수를 구하면 되지만 길이의 최댓값이 이므로 메모리 초과가 발생한다.
예제들을 보면 A와 B의 최대 공약수는 입력값들의 최대공약수 길이를 나타낸다. - 3, 4의 최대 공약수는 1이고 A와 B의 최대 공약수는 1
입력값의 최대 공약수를 구한 뒤 그 길이만큼 1를 출력해주면 된다.
StringBuilder sb = new StringBuilder();
long gcm = GCM(a, b);
for (int i = 0; i < gcm; i++) {
sb.append(1);
}
//백준
public class Main {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long a = Long.parseLong(st.nextToken());
long b = Long.parseLong(st.nextToken());
StringBuilder sb = new StringBuilder();
long gcm = GCM(a, b);
for (int i = 0; i < gcm; i++) {
sb.append(1);
}
System.out.println(sb);
}
static long GCM(long a, long b) {
if (b == 0) return a;
return GCM(b, a % b);
}
}