Java

[백준 2485] 가로수 (JAVA)

iheeeee6-6 2023. 3. 23. 23:45
728x90

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

 

2485번: 가로수

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

www.acmicpc.net

 

1) 각 간격의 최대공약수를 찾는다!

2) 총 거리에서 최대공약수로 계산했을때 총 몇개의 가로수가 들어가는지 계산하고

현재 있는 가로수의 수를 뺀다

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());
		ArrayList<Integer> arr = new ArrayList<>();
		ArrayList<Integer> map = new ArrayList<>();
		int num1 = Integer.parseInt(br.readLine());
		map.add(num1);
		for (int i = 0; i < n - 1; i++) {
			int num2 = Integer.parseInt(br.readLine());
			arr.add(num2 - num1);
			map.add(num2);
			num1 = num2;
		}

		int max = arr.get(0);
		int dis1 = arr.get(0);
		for (int i = 1; i < arr.size(); i++) {
			int dis2 = arr.get(i);
			for (int j = 1; j <= dis1; j++) {
				if (dis1 % j == 0 && dis2 % j == 0) {
					max = j;
				}
			}
			dis1 = max;
		}

		System.out.println((map.get(n-1)-map.get(0))/max-(n-1));
	}

}