1. 문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AYmRI_8ajv8DFARi
2. 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static StringBuilder answer = new StringBuilder();
static Reader scanner = new Reader();
static int testNumber;
static String firstNumber;
static String secondNumber;
static void input() {
firstNumber = scanner.next();
secondNumber = scanner.next();
}
static void solution() {
if(firstNumber.equals(secondNumber)) {
answer.append(firstNumber).append('\n');
return;
}
answer.append(1).append('\n');
}
public static void main(String[] args) {
int T = scanner.nextInt();
testNumber = 1;
for(int test = 1; test <= T; test++) {
answer.append('#').append(test).append(' ');
input();
solution();
}
System.out.print(answer);
}
static class Reader {
BufferedReader br;
StringTokenizer st;
public Reader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
}
3. 접근
- 입력으로 들어오는 숫자의 범위가 1 이상 10100 이하이기 때문에 실제로 최대공약수를 구하는 것은 불가능하다.
- 우리가 구하고자 하는 것은 주어진 두 숫자를 포함하여 두 숫자 사이의 모든 숫자들에 대한 최대공약수인데 생각해보면 인접한 두 수 사이의 최대공약수는 1이고, 그렇기 때문에 두 숫자가 같지 않다면 항상 최대공약수는 1이 될 것이다.
- 만약 두 숫자가 같다면 범위 안에 존재하는 숫자가 하나이기 때문에 해당 수가 최대공약수가 될 것이다.