//TIP To Run code, press or
// click the icon in the gutter.
import java.util.Scanner;
import java.util.;
import java.io.;
// 1 10 13 16
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] garo = new int[N];
for (int i = 0; i< N; i++)
{
garo[i] = Integer.parseInt(br.readLine());
}
int[] distance = new int[N];
for (int i =0; i < N-1; i++)
{
distance[i] = garo[i+1] - garo[i];
}
int[] distanceMinus = new int[N];
for (int i=0; i< N-1; i++)
{
distanceMinus[i] = gcd(distance[i],distance[i+1]); // 두 거리의 차이를 구하는거야!! 9 6 3 12
}
int mindistanceMinus = gcd(distanceMinus[0],distanceMinus[1]);
for (int i = 0; i < N-1; i++)
{
if (mindistanceMinus > gcd(distanceMinus[i],distanceMinus[i+1]))
{
mindistanceMinus = gcd(distanceMinus[i],distanceMinus[i+1]);
}
}
int count = 0;
for (int i = 0; i < N-1; i++)
{
if (distance[i] /mindistanceMinus != 1 ) {
int m =distance[i] /= mindistanceMinus;
count += m-1;
}
}
System.out.println(count);
}
public static int gcd(int a, int b)
{
while(b !=0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
변수를 너무 많이 설정하여 마지막에 값을 구함에 있어 어려움을 겪었다. 이번 문제는 지피티의 도움 없이 온전히 나의 힘으로 푼 문제이다..!!!!!!!
두 값 사이에 거리를 구하고 그 거리의 최대 공약수를 구한 후 최대 공약수중의 최솟값을 최소 거리로 잡은 후 계산하면 깔끔하게 나오는 문제였다. 문제가 적당히 재밌고 괜찮은 문제인 것 같다! 최대 공약수 공식을 암기하려고 노력하고 있다.