본문으로 바로가기

백준 17087 숨바꼭질 6 java

category Algorithm by java 2019. 9. 17. 15:19

 

문제

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다.

수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.

모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.

입력

첫째 줄에 N(1 ≤ N ≤ 105)과 S(1 ≤ S ≤ 109)가 주어진다. 둘째 줄에 동생의 위치 Ai(1 ≤ Ai ≤ 109)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다.

출력

가능한 D값의 최댓값을 출력한다.

 

--------------------------------------------------------------------------------------------------------

 

현재 나의 위치와 동생들의 위치의 차이를 구한다. (Math.abs 절대값 이용)

만약 동생이 4명이라면, 총 4개의 값의 최대공약수를 구하면 된다.

 

 

 

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

 

17087번: 숨바꼭질 6

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다. 모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.

www.acmicpc.net

 

 

 

import java.util.Scanner;

public class Exam17087_2 {

	static int GCD(int n1, int n2) {
		if(n2 ==0) return n1;
		else return GCD(n2,n1%n2);
	}
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int n =sc.nextInt(); //동생의 수
		int s = sc.nextInt(); //나의 위치
		int [] arr = new int[n];
		
		for(int i=0; i<n; i++) {
			int a = sc.nextInt(); //동생의 위치
			arr[i] = Math.abs(s-a); // 내위치와 동생의 위치 차이 저장
		}
		
		int gcd = arr[0];
		for(int i=1; i<arr.length; i++) {
			gcd = GCD(gcd,arr[i]);
		}
		System.out.println(gcd);
		
	}

}

'Algorithm by java' 카테고리의 다른 글

백준 4949번 균형잡힌 세상 java  (0) 2019.09.19
백준 17298번 오큰수 java  (0) 2019.09.19
백준 9613번 GCD합 java  (0) 2019.09.17
백준 10799번 쇠막대기 java  (0) 2019.09.11
백준 1966번 프린터 큐 java  (0) 2019.09.08