Algorithm/백준

백준 [17087] 숨바꼭질 6 (자바)

youngjae-kim 2024. 6. 9. 10:39
728x90
반응형

문제

  • 풀이
  • 수빈이의 지점과 모든 동생의 위치 사이의 거리를 구한다.
  • 각 위치들의 최대 공약수를 구한다. (유클리드 호제법 사용)
  • 유클리드 호제법
    • 나머지가 0이 되어 더이상 나누어질 수 없을 때까지 반복해서 나누어 최대 공약수를 구하는 방법
  • 모든 동생위치에 대한 최대 공약수를 구해준다.

정답코드

package com.baekjoon.p17087;

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int s = Integer.parseInt(st.nextToken());

        int[] arr = new int[n];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Math.abs(Integer.parseInt(st.nextToken()) - s); // s와 거리 구하기
        }

        int d = arr[0];

        /**
         * 모든 배열을 돌면서 최대공약수를 구하고 구한 공약수와 다음 배열의 수의 최대 공약수 구하기
         */
        for (int i = 0; i < n; i++) {
            d = gcd(d, arr[i]);
        }

        System.out.println(d);
    }

    static int gcd(int a, int b) {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }
}
728x90
반응형