백준 2485

김경욱·2025년 8월 15일

백준

목록 보기
45/121

//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;
}

}

변수를 너무 많이 설정하여 마지막에 값을 구함에 있어 어려움을 겪었다. 이번 문제는 지피티의 도움 없이 온전히 나의 힘으로 푼 문제이다..!!!!!!!
두 값 사이에 거리를 구하고 그 거리의 최대 공약수를 구한 후 최대 공약수중의 최솟값을 최소 거리로 잡은 후 계산하면 깔끔하게 나오는 문제였다. 문제가 적당히 재밌고 괜찮은 문제인 것 같다! 최대 공약수 공식을 암기하려고 노력하고 있다.

0개의 댓글