본문 바로가기

알고리즘 기초1 Java

수학1_17087 번 : 숨바꼭질 JAVA

728x90

 

첫번째 행의 첫번째 값은 수빈이 위치와 동생들 사이를 넣을 수 있는  int 배열 크기의 값으로, 두번째 값은 수빈이 현재 값을 받는다.

두번째 행들의 동생들 자리값을 수빈이 자리간의 거리를 배열에 담고, 배열에 담긴 값들을 차례대로 유클리드 호제법 알고리즘에 넣어서 위치에 대한 최종 최대공약수(GCD)를 구할 수 있다.

 

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

public class Main{
	public static void main(String[] args){
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
       
        int N = Integer.parseInt(st.nextToken()); // int 배열 크기 값 받기
        int S = Integer.parseInt(st.nextToken()); // 수빈이 자리값 받기
        
        int[] distance = new int[N];
        st = new StringTokenizer(br.readLine());
        
        for(int i=0;i<N;i++){
        	distance[i] = Integer.parseInt(st.nextToken());
            distance[i] = Math.abs(S-distance[i]) // 수빈이와 동생 거리 값 받기
        }
        
        int GCD = distance[0];
        
        for(int j=1;j<N;j++){
        	GCD = gcd(GCD,distance[j]); // 유클리드 호제법으로 GCD값 구하기
        }
        bw.write(String.valueOf(GCD));
        bw.flush();
        bw.close();
    }
    public static int gcd(int a, int b){
    	if(a%b==0)
        	return a;
        else
        	return gcd(b,a%b);
    }
}