백준 9417 java : 완전탐색, 유클리드 호제법

magicdrill·2025년 7월 30일
0

백준 문제풀이

목록 보기
643/655

백준 9417 java : 완전탐색, 유클리드 호제법

입력 과정에서 각 테스트케이스의 숫자를 입력할 때, 몇개의 숫자가 들어갈 지 정하지 않고 입력받는 만큼만 저장한다. 그러므로 문자열로 입력받아, 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;
    }
#### }

0개의 댓글