Tech/Problem Solving

[백준 2485] 가로수 (Java)

Bellroute 2020. 2. 13. 22:42

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

 

2485번: 가로수

첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3≤N≤100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가로수의 위치를 나타내는 정수는 100,000,000 이하이다. 가로수의 위치를 나타내는 정수는 모두 다르다.

www.acmicpc.net

접근 방식

주어진 가로수의 간격 간의 최대공약수 == 최종 간격

 

최대 공약수는 유클리드 호제법을 사용하였다.

 

간격을 담은 배열을 만들어 주어진 가로수 간의 간격을 담고

앞에서부터 그 다음 값과 차례로 최대 공약수를 구해나갔다.

 

 

소스 코드

import java.util.Scanner;

public class Main {
    private static int[] gaps;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        int[] trees = new int[N];
        gaps = new int[N - 1];

        for (int i = 0; i < N; i++) {
            trees[i] = scanner.nextInt();

            if (i > 0) {
                gaps[i - 1] = trees[i] - trees[i - 1];
            }
        }

        for (int i = 0; i <= gaps.length - 2; i++) {
            gaps[i + 1] = gcd(gaps[i], gaps[i + 1]);
        }

        int gap = gaps[gaps.length - 1];

        System.out.println((trees[N - 1] - trees[0]) / gap - (N - 1));
    }

    private static int gcd(int a, int b) {
        while (b > 0)
        {
            int tmp = a;

            a = b;
            b = tmp%b;
        }
        return a;
    }
}
반응형