본문 바로가기
알고리즘/백준

백준 17087번 - 숨바꼭질 6 (Java 8)

by latissimus 2022. 3. 16.

https://www.acmicpc.net/problem/17087

 

17087번: 숨바꼭질 6

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이

www.acmicpc.net

코드 :

최대공약수, 유클리드 호제법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 gcd = 0;
        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(S - (Integer.parseInt(st.nextToken())));
        }

        gcd = arr[0];
        for (int i = 1; i < N; i++) {
            gcd = GCD(gcd, arr[i]);
        }
        System.out.println(gcd);
    }
    public static int GCD(int num1, int num2){
        int r = num1 % num2;
        if(r == 0){
            return num2;
        }

        return GCD(num2, r);
    }
}

무조건 D 단위로 움직여야 한다는 의미로 D는 최대공약수를 의미한다.

댓글