입력 과정에서 각 테스트케이스의 숫자를 입력할 때, 몇개의 숫자가 들어갈 지 정하지 않고 입력받는 만큼만 저장한다. 그러므로 문자열로 입력받아, split으로 분할하고 정수로 파싱해서 저장한다. 이때 개행 문자를 입력받아 입력버퍼를 지워준다.
C언어를 배울 때 학습한건데... java에서도 동일하다.
N = sc.nextInt();
를 수행하면 예를 들어 3을 입력했을때, 3 그리고 엔터를 친다. 그럼 입력버퍼에 3\n이 저장되고, 3만 꺼내지고 \n은 버퍼에 남아있는다. 이 때 다음 입력이 정수입력과 같은 경우면 상관이 없지만, sc.nextLine()
처럼 개행문자도 포함해 읽는 명령의 경우, 입력버퍼에 남아있는 \n
을 현재 입력이라고 착각하고 읽어버려 오류가 발생한다. 그러므로 개행문자 제거를 통해 입력버퍼를 지우고 오류를 해결한다.
import java.util.Scanner;
public class BJ9417 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int N, i;
N = sc.nextInt();
sc.nextLine();// 개행 문자 제거
for(i = 0; i < N; i++){
String [] testCase = sc.nextLine().split(" ");
int[] nums = new int[testCase.length];
for (int j = 0; j < testCase.length; j++) {
nums[j] = Integer.parseInt(testCase[j]); // 각 토큰을 정수로 변환
}
System.out.println(findAnswer(nums));
}
sc.close();
}
public static int findAnswer(int [] nums){
int i, j, A, B, maxGCD = 1;
for(i = 0; i < nums.length - 1; i++){
for(j = i + 1; j < nums.length; j++){
A = nums[i];
B = nums[j];
if(A < B){
int temp = A;
A = B;
B = temp;
}
while(B != 0){
int temp = A % B;
A = B;
B = temp;
}
if(maxGCD < A){
maxGCD = A;
}
}
}
return maxGCD;
}
#### }